Ключевое слово open
Ключевое слово open используется для разрешения наследования от класса
или переопределения методов и свойств. По умолчанию все классы в Kotlin
являются финальными (final) и не могут быть унаследованы.
Синтаксис
open class ClassName {
open fun methodName() {
// method body
}
open val propertyName: Type = value
}
Пример
Создадим открытый класс Animal с открытым методом:
open class Animal {
open fun makeSound() {
println("Some sound")
}
}
class Dog : Animal() {
override fun makeSound() {
println("Bark")
}
}
val dog = Dog()
dog.makeSound()
Результат выполнения кода:
String "Bark"
Пример
Создадим открытое свойство с возможностью переопределения:
open class Vehicle {
open val maxSpeed: Int = 100
}
class Car : Vehicle() {
override val maxSpeed: Int = 200
}
val car = Car()
println(car.maxSpeed)
Результат выполнения кода:
Int 200
Пример
Попытка наследования от финального класса без open вызовет ошибку:
class FinalClass {
fun method() {
println("Final method")
}
}
// Error: This type is final, so it cannot be inherited from
// class ChildClass : FinalClass()
Пример
Использование open с абстрактными классами:
abstract open class AbstractBase {
open fun concreteMethod() {
println("Concrete implementation")
}
abstract fun abstractMethod()
}
class ConcreteClass : AbstractBase() {
override fun abstractMethod() {
println("Implemented abstract method")
}
}
val obj = ConcreteClass()
obj.concreteMethod()
obj.abstractMethod()
Результат выполнения кода:
String "Concrete implementation"
String "Implemented abstract method"