private при наследовании в Kotlin
Ключевое слово private скрывает член только внутри объявившего класса.
Потомок не видит приватное свойство родителя - обращение
this.name в Employee к полю User
вызывает ошибку компиляции:
open class User {
private var name: String = ""
open fun setName(name: String) {
this.name = name
}
fun getName(): String {
return this.name
}
}
class Employee : User() {
override fun setName(name: String) {
if (name.isNotEmpty()) {
this.name = name // ошибка
}
}
}
Приватный метод родителя тоже недоступен в потомке:
open class User {
private fun validate(value: String): Boolean {
return value.isNotEmpty()
}
}
class Employee : User() {
fun check(value: String): Boolean {
return validate(value) // ошибка
}
}
Публичные методы родителя по-прежнему можно вызывать у объекта
потомка. Ограничение касается прямого доступа к private.
Попробуйте в классе Employee
воспользоваться приватным методом
родителя.