В Kotlin вложенные типы и сопутствующие объекты не наследуются автоматически.
Это поведение не относится к Java, вы можете воспроизвести такое же поведение только в Kotlin:
open class Base {
class Nested
}
class Derived : Base()
val base = Base.Nested::class // OK
val derived = Derived.Nested::class // Error: 'Nested' unresolved
Кактаким образом, вы явно должны квалифицировать вложенный класс, используя базовый класс.
Это поведение было преднамеренно сделано более строгим в Kotlin, чтобы избежать некоторой путаницы в Java, связанной с доступом к статическим членам / классам через производные типы.Вы также видите, что многие IDE предупреждают вас в Java, когда вы используете имя производного класса для ссылки на статические символы в базовом классе.
Что касается терминологии, у Kotlin есть четкое определение внутренних классов (а именно аннотированные ключевым словом inner
).Не все вложенные классы являются внутренними классами.См. Также здесь .
Связанный: