Что нужно сделать, чтобы класс можно было наследовать? (open)
По умолчанию, классы в Kotlin объявляются как final, то есть их нельзя наследовать. Если мы всё же попытаемся наследоваться от такого класса, то получим ошибку: “This type is final, so it cannot be inherited from”.
Чтобы класс можно было наследовать, его нужно объявить с модификатором open.
По умолчанию, классы в Kotlin объявляются как final, то есть их нельзя наследовать. Если мы всё же попытаемся наследоваться от такого класса, то получим ошибку: “This type is final, so it cannot be inherited from”.
Чтобы класс можно было наследовать, его нужно объявить с модификатором open.
open class Fraction {Не только классы, но и функции в Kotlin по умолчанию имеют статус final. Поэтому те функции, которые находятся в родительском классе и которые вы хотите переопределить в дочерних классах, также должны быть отмечены open.
...
}
open class Fraction {Свойства класса также по умолчанию являются final. Для возможности переопределения таких свойств в дочерних классах, не забудьте и их отметить ключевым словом open.
open fun toAttack() {
...
}
}
open class Fraction {При этом, если в открытом классе будут присутствовать функции и свойства, которые не отмечены словом open, то переопределяться они не будут. Но дочерний класс сможет к ним обращаться.
open val name: String = "default"
open fun toAttack() {
...
}
}
open class Fraction {
open val name: String = "default"
fun toAttack() {
...
}
}
class Horde : Fraction() {
override val name = "Horde"
}
class SomeClass() {
val horde = Horde()
horde.toAttack()
}