class Animal {}
class Dog extends Animal {}
List<Dog> dogs = new ArrayList<>();
List<? extends Animal> animals = dogs; // 协变
public interface IEnumerable<out T> { }
public class Animal { }
public class Cat : Animal { }
IEnumerable<Cat> cats = new List<Cat>();
IEnumerable<Animal> animals = cats; // 协变
open class Animal
class Cat : Animal()
val cats: List<Cat> = listOf()
val animals: List<Animal> = cats // 协变