In .NET framework less than 4.0, the following Statement 2 will error out but will work in .NET 4.0+. Here, Furniture is abstract class and Table is concrete class.
Furniture table = new Table(); // Statement 1 works in all .NET versions
IEnumerable<Furniture> tables = new List<Table>(); // Statement 2 works only above .NET 4.0
What is this concept called as?