Загрузка данных


open class Animal(val name: String) {

    open fun makeSound(): String {
        return "$name издаёт звук"
    }
}


class Dog(name: String) : Animal(name) {

    override fun makeSound(): String {
        return "$name говорит: Гав-гав!"
    }

    fun fetch(): String {
        return "$name приносит палку"
    }
}


class Cat(name: String) : Animal(name) {

    override fun makeSound(): String {
        return "$name говорит: Мяу!"
    }

    fun climb(): String {
        return "$name залез на шкаф"
    }
}


fun main() {

    val animals = listOf<Animal>(
        Dog("Шарик"),
        Cat("Мурка"),
        Dog("Бобик"),
        Cat("Барсик")
    )

    for (animal in animals) {

        println(animal.makeSound())

        if (animal is Dog) {
            println(animal.fetch())
        }

        if (animal is Cat) {
            println(animal.climb())
        }
    }
}