Модификатор protected
Модификатор protected используется для ограничения видимости
членов класса (свойств и методов) только внутри самого класса
и его классов-наследников. Защищенные члены не видны извне
иерархии наследования, даже если они находятся в том же пакете.
Синтаксис
protected var propertyName: Type = value
protected val propertyName: Type = value
protected fun methodName(parameters): ReturnType {
// method body
}
Пример
Создадим базовый класс с защищенным свойством и методом:
open class Animal {
protected val species: String = "Mammal"
protected fun makeSound() {
println("Animal sound")
}
fun publicMethod() {
makeSound() // доступно внутри класса
println(species) // доступно внутри класса
}
}
Пример
Создадим класс-наследник с доступом к защищенным членам:
class Dog : Animal() {
fun bark() {
makeSound() // доступно в наследнике
println("Species: $species") // доступно в наследнике
}
}
Пример
Попробуем обратиться к защищенным членам извне:
val animal = Animal()
// animal.makeSound() // Ошибка: protected function
// println(animal.species) // Ошибка: protected property
animal.publicMethod() // Доступно: public function
Результат выполнения кода:
Animal sound
Mammal
Пример
Защищенные члены интерфейсов:
interface MyInterface {
protected fun interfaceMethod() {
println("Protected interface method")
}
}
class MyClass : MyInterface {
fun test() {
interfaceMethod() // доступно в реализации
}
}
Пример
Защищенный конструктор:
class Parent protected constructor(val name: String) {
companion object {
fun create(): Parent {
return Parent("Default")
}
}
}
// val parent = Parent("Test") // Ошибка: protected constructor
val parent = Parent.create() // Доступно через фабричный метод
Смотрите также
-
ключевое слово
public,
которое обеспечивает публичную видимость членов класса -
ключевое слово
private,
которое ограничивает видимость членов класса только самим классом -
ключевое слово
internal,
которое ограничивает видимость членов класса пределами модуля -
ключевое слово
class,
которое используется для объявления классов