Vorislik (inheritance) — OOP ning muhim ustuni. U bir sinfga boshqa sinfning barcha xususiyatlarini “meros qilib olish” imkonini beradi. Bu kod takrorlanishini keskin kamaytiradi va sinflarni mantiqiy iyerarxiyaga soladi. “Talaba” va “O’qituvchi” — ikkovi ham “Inson”, demak umumiy xususiyatlarni “Inson”dan meros oladi.
Vorislik — bir sinf (bola) boshqa sinf (ota) ning maydon va metodlarini o’zlashtirishi. Dart’da bu
extendskalit so’zi bilan amalga oshiriladi.
Asosiy va bola sinf
Dart’da vorislik class Bola extends Ota shaklida yoziladi:
class Inson {
String ism = "";
void tanishtir() {
print("Men $ism");
}
}
class Talaba extends Inson {
int ball = 0;
}
void main() {
var t = Talaba();
t.ism = "Master Sherkulov"; // Inson dan meros
t.ball = 95; // o'ziniki
t.tanishtir(); // Inson metodini ishlatadi
print("Ball: ${t.ball}");
}
Men Master Sherkulov
Ball: 95
Talaba sinfi ism maydonini va tanishtir() metodini Inson dan meros oldi, ustiga ball maydonini qo’shdi. Bir marta yozilgan kod qayta ishlatildi.
super — ota sinfga murojaat
Bola sinf ota sinf konstruktoriga yoki metodiga super orqali murojaat qiladi:
class Inson {
String ism;
Inson(this.ism);
}
class Talaba extends Inson {
int ball;
Talaba(String ism, this.ball) : super(ism); // ota konstruktorini chaqiradi
}
void main() {
var t = Talaba("Farrux", 90);
print("${t.ism}: ${t.ball}");
}
Farrux: 90
: super(ism) ota sinf konstruktorini chaqirdi. Bu vorislikning eng ko’p ishlatiladigan naqshi (konstruktorlarni keyingi darsda batafsil ko’ramiz).
Metodni qayta yozish (override)
Bola sinf ota metodini qayta yozishi mumkin. Buning uchun @override belgisi qo’yiladi:
class Inson {
void rol() {
print("Oddiy inson");
}
}
class Oqituvchi extends Inson {
@override
void rol() {
print("O'qituvchi");
}
}
void main() {
Inson().rol();
Oqituvchi().rol();
}
Oddiy inson
O'qituvchi
Bir xil nomli rol metodi ikki sinfda turlicha ishladi. @override — bu metod ota sinfnikini qayta yozayotganini bildiruvchi belgi; u xatolarning oldini oladi.
super bilan ota metodni chaqirish
Override qilingan metod ichida ota versiyasini ham super bilan chaqirish mumkin:
class Inson {
void salom() => print("Salom!");
}
class Oqituvchi extends Inson {
@override
void salom() {
super.salom(); // ota metodini chaqiradi
print("Men o'qituvchiman");
}
}
void main() {
Oqituvchi().salom();
}
Salom!
Men o'qituvchiman
super.salom() ota versiyasini chaqirdi, so’ng bola o’zining qo’shimchasini bajardi. Bu ota funksionalligini kengaytirishda foydali.
Xulosa
Bu bo’limda vorislikni, extends bilan asosiy va bola sinf munosabatini, super orqali ota sinfga murojaat va @override bilan metodni qayta yozishni ko’rib chiqdik. Vorislik kodni qayta ishlatishni yangi darajaga olib chiqadi. Keyingi darsda inkapsulyatsiyaga o’tamiz.