Статическое финальное наследование поля в котлине - PullRequest
0 голосов
/ 07 октября 2018

У меня здесь очень простой вопрос, но я не могу его понять.Рассмотрим класс java:

class A {
    public static final int AA=5;
}

, который переводит (внутренне) в kotlin так:

open class A {
    companion object {
        val AA:Int=5
    }
}

По крайней мере, я так полагаю.Теперь, если вы унаследовали в java:

class B extends A {
    int AAA;
}

, вы можете получить доступ к полю AA (от A) до B следующим образом: B.AA.Однако в Котлине это невозможно.Единственный способ получить к нему доступ через А.А.А.Это встроенная функция или я что-то не так делаю?

1 Ответ

0 голосов
/ 07 октября 2018

В Java, когда компилятор видит B.AA, он автоматически преобразует его в A.AA.Там нет никакого реального наследования или переопределения.

Разработчики Kotlin решили не эмулировать эту функцию, потому что она не подходит для представления статических методов как принадлежащих object: объект-компаньон B не делаетНе расширяйте сопутствующий объект A и не можете, потому что вы не можете расширить object.

. Обратите внимание, что аналогично в Java вы можете получить доступ к полю через a.AA, где a является экземпляром A;вы не можете сделать это в Котлине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...