Junior
Kako funkcioniše nasledjivanje u Kotlinu?
sobes.tech АИ
Одговор од АИ
Наслеђивање у Kotlin-у се заснива на принципу отворених класа. По подразумеванию, сви класи су затворени (final), и да бисте направили клас наследивим, морате га јасно означити кључном речи open.
Главне тачке:
- Отворени класи: Родитељски клас мора бити означен као
open.open class Base { // ... } - Наслеђивање: Наслеђивање се врши помоћу двоеточја (
:), након којег следи име родитељског класа и, ако је потребно, позив његовог конструктора.class Derived : Base() { // ... } - Преоптерећење метода и својстава: За преоптерећење метода или својстава родитељског класа, они морају бити означени као
open, а у класи која наследи користи се кључна речoverride.Ако родитељска метода или својство нису означени каоopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, не могу се преоптерећивати. - Приступ члановима родитељског класа: Приступ члановима родитељског класа из класе која наследи врши се помоћу кључне речи
super.class Derived : Base() { override fun process() { super.process() // Позив методе родитељског класа // ... } } - Конструктори: Ако родитељски клас има конструктор са параметрима, класа која наследи мора позвати тај конструктор у својој декларацији.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Интерфејси: Класа може реализовати више интерфејса, који се могу навести након наследног класа, раздвојени зарезом. Интерфејси су подразумевано "отворени" за реализацију.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Абрактне класе: Абстрактне класе служе за дефинисање делимичне реализације и садрже абстрактне методе и својства (означене са
abstract), које морају бити реализоване у класи која наследи. Абстрактни чланови не захтевајуopen. Абстрактна класа такође не захтеваopenза наследство.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
У целини, Kotlin тежи јасности, захтевајући коришћење open за дозвољавање наследства и преоптерећења.