Ответ
final в Java/Kotlin имеет несколько применений:
- Классы – запрещает наследование:
final class MyClass // нельзя унаследовать
- Методы – запрещает переопределение:
open class Parent {
final fun cantOverride() {}
}
- Переменные – делает значение неизменяемым:
final val PI = 3.14 // константа
- Параметры – запрещает изменение аргумента внутри метода:
fun process(final param: String) {
// param = "new" – ошибка
}
В Kotlin val по умолчанию аналогичен final в Java. Для изменяемых переменных используется var.