> Как работают final и static в Kotlin и Java (Kotlin, Java, Android)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Одноклассники

Стек: Kotlin, Java, Android

> Пример ответа

В Java final для переменной означает, что её нельзя переназначить (для примитивов - значение, для ссылок - саму ссылку). Для класса - запрет наследования, для метода - запрет переопределения. static - принадлежность классу, а не экземпляру: статические поля и методы доступны без создания объекта, статические вложенные классы не имеют доступа к нестатическим членам внешнего класса.

В Kotlin final является поведением по умолчанию для классов и методов - чтобы разрешить наследование, нужно явно указать open. Для переменных final заменяется на val (неизменяемая ссылка). static в Kotlin отсутствует как ключевое слово; его роль выполняют:

  • companion object - объект-компаньон внутри класса, члены которого вызываются как статические (например, MyClass.foo()), но на самом деле это синглтон, привязанный к классу.
  • Функции и свойства верхнего уровня (вне класса) - компилируются в статические методы/поля Java.
  • @JvmStatic - аннотация для методов внутри companion object, чтобы они генерировались как настоящие статические методы Java.

Пример: в Java public static final int MAX = 10; в Kotlin пишется как const val MAX = 10 (только для примитивов и строк) внутри companion object или на верхнем уровне.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью