Шаг 170.
Основы Kotlin.
Наследование. Иерархия типов в языке Kotlin

    На этом шаге мы поговорим о классе Any.

    Все классы в Kotlin наследуют общий суперкласс, известный как Any, без необходимости явного указания на это в вашем коде (рисунок 1).


Рис.1. Иерархия типов TownSquare

    Например, и Room, и Player являются косвенными потомками Any. Вот почему можно объявлять функции, которые будут принимать экземпляры любого из этих типов в качестве аргументов. В этом Kotlin напоминает Java, где все классы неявно наследуют класс java.lang.object.

    Рассмотрим следующий пример функции с именем printIsSourceOfBlesings().

    Эта функция принимает аргумент типа Any и использует условный оператор для проверки типа переданного аргумента. В конце она выводит результаты проверки. Здесь используется несколько новых идей, которые мы рассмотрим чуть позже.

fun printIsSourceOfBlessings(any: Any) {
    val isSourceOfBlessings = if (any is Player) {
        any.isBlessed
    } else {
        (any as Room).name == "Fount of Blessings"
    }
    println("$any is a source of blessings: $isSourceOfBlessings")
}

    В NyetHack есть только два источника благословения: благословленный игрок или комната с названием Fount of Blessings.

    Так как каждый объект - это подкласс Any, можно передавать аргументы любого типа в printIsSourceOfBlesings(). Такая гибкость полезна, но иногда она не позволяет сразу же начать работу с аргументом. Этот пример использует приведение типа, чтобы справиться с ненадежным аргументом Any.

    На следующем шаге мы рассмотрим приведение типа.




Предыдущий шаг Содержание Следующий шаг