open class Animal class Cat() : Animal() { fun myaw() { System.out.println("myaw!"); } } class Dog() : Animal() { fun gav() { System.out.println("dog!"); } } // Usage: // val list = mutableListOf() // list.addAnything("string") // val fail = list[0] private fun List .addAnything(element: E) { if (this is MutableList) { this.add(element) } } fun main() { val cats = mutableListOf(Cat(), Cat()) val upcast: List = cats val covariance: List = upcast val animals: MutableList = covariance as MutableList animals[0] = Dog() for (cat in cats) { cat.myaw() } }