НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1268 of 1310 menu

Модификатор 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,
    которое используется для объявления классов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить