Junior
Kotlin'da meros olish qanday ishlaydi?
sobes.tech AI
AIdan javob
Kotlin'da merosxo'rlik ochiq sinflar tamoyiliga asoslangan. Standart tarzda, barcha sinflar yopiq (final) bo'lib, ularni merosxo'rlik qilish uchun aniq open so'z bilan belgilash kerak.
Asosiy nuqtalar:
- Ochiq sinflar: Asosiy sinf
openbilan belgilanishi kerak.open class Base { // ... } - Merosxo'rlik: Merosxo'rlik ikki nuqta (
:) yordamida amalga oshiriladi, undan keyin asosiy sinf nomi va agar kerak bo'lsa, uning konstruktor chaqiriladi.class Derived : Base() { // ... } - Metod va xususiyatlarni qayta yozish: Asosiy sinfdan metod yoki xususiyatlarni qayta yozish uchun, ular
openbilan belgilangan bo'lishi kerak, va meros sinfdaoverrideso'zi ishlatiladi.Agar asosiy sinfdan metod yoki xususiyatopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }openbilan belgilangan bo'lmasa, uni qayta yozib bo'lmaydi. - Asosiy sinf a'zolariga kirish: Asosiy sinf a'zolariga meros sinfidan kirish
superso'zi yordamida amalga oshiriladi.class Derived : Base() { override fun process() { super.process() // Asosiy sinf metodini chaqirish // ... } } - Konstruktorlar: Agar asosiy sinf parametrli konstruktorga ega bo'lsa, meros sinf bu konstruktorni o'zining imzosida chaqirishi kerak.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Interfeyslar: Bir sinf bir nechta interfeyslarni amalga oshirishi mumkin, va ular vergul bilan ajratilgan holda meros sinfdan keyin ko'rsatiladi (agar mavjud bo'lsa). Interfeyslar odatda "ochiq" bo'lib, amalga oshirish uchun.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Abstrakt sinflar: Abstrakt sinflar qisman amalga oshirishni belgilash uchun ishlatiladi va ular
abstractbilan belgilangan metodlar va xususiyatlarni o'z ichiga oladi, ular meros sinflar tomonidan amalga oshirilishi kerak. Abstrakt a'zolaropentalab qilmaydi. Abstrakt sinf hamopenbo'lish shart emas.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
Umuman olganda, Kotlin aniq bo'lishga intilmoqda va open foydalanishni merosxo'rlik va qayta yozish uchun talab qiladi.