@Igor-Novikov

Почему умное приведение типов в Котлин дает доступ к другому классу?

Есть 3 класса - A,B,C. В каждом из них есть уникальные и переопределенные методы

open class A{
    open fun method(){
        println("Method from class - A")
    }

    open fun aMethod(){
        println("Unique method from class - A ")
    }
}

open class B :A(){
    override fun method() {
        println("Method from class - B")
    }

    open fun bMethod(){
        println("Unique method from class - B ")
    }
}

open class C : B(){
    override fun method(){
        println("Method from class - C")
    }

    open fun cMethod(){
        println("Unique method from class - C ")
    }
}


Почему с помощью "умного приведения" ссылки на класс C к типу класса А - я имею доступ к методу класса B?

val ref = C()
if(ref is A){
        ref.cMethod()
        ref.bMethod()
    }
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
C это и B, и А тоже. smartcast тут не при чем - убери его, и всё останется абсолютно так же. Потому что публичные методы родителя видны в интерфейсе потомка. Больше того, ref is A всегда true, IDE должна тебе это подсказать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы