Merosxo’rlik (inheritance) — OOP ning ikkinchi 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.
Merosxo’rlik — bir sinf (bola/hosila) boshqa sinf (ota/asosiy) ning maydon va metodlarini o’zlashtirishi. Java’da bu
extendskalit so’zi orqali amalga oshiriladi.
Asosiy va bola sinf
Java’da meros class Bola extends Ota shaklida yoziladi. Umumiy Inson sinfi va undan meros oluvchi Talaba ni ko’ramiz:
class Inson {
String ism;
void tanishtir() {
System.out.println("Men " + ism);
}
}
class Talaba extends Inson {
int ball;
}
public class Main {
public static void main(String[] args) {
Talaba t = new Talaba();
t.ism = "Master Sherkulov"; // Inson dan meros
t.ball = 95; // o'ziniki
t.tanishtir(); // Inson metodini ishlatadi
System.out.println("Ball: " + t.ball);
}
}
Men Master Sherkulov
Ball: 95
Talaba sinfi ism maydonini va tanishtir() metodini Inson dan meros oldi, ustiga o’zining ball maydonini qo’shdi. Bir marta yozilgan kod qayta ishlatildi.
super — ota sinfga murojaat
Bola sinf ota sinfning konstruktori yoki metodiga super orqali murojaat qiladi:
class Inson {
String ism;
Inson(String ism) {
this.ism = ism;
}
}
class Talaba extends Inson {
int ball;
Talaba(String ism, int ball) {
super(ism); // ota konstruktorini chaqiramiz
this.ball = ball;
}
}
public class Main {
public static void main(String[] args) {
Talaba t = new Talaba("Farrux", 90);
System.out.println(t.ism + ": " + t.ball);
}
}
Farrux: 90
super(ism) ota sinf konstruktorini chaqirdi, so’ng biz ball ni qo’shdik. Bu — merosning eng ko’p ishlatiladigan naqshi.
Metodni qayta yozish (override)
Bola sinf ota sinfdan meros olgan metodni o’ziga moslab qayta yozishi mumkin. Bu override deb ataladi va @Override bilan belgilanadi:
class Inson {
void rol() {
System.out.println("Oddiy inson");
}
}
class Oqituvchi extends Inson {
@Override
void rol() {
System.out.println("O'qituvchi");
}
}
public class Main {
public static void main(String[] args) {
new Inson().rol();
new 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.
Java’da yakka meros
Muhim qoida: Java’da bir sinf faqat bitta ota sinfdan meros oladi (yakka meros). Bu C++’dan farq qiladi. Bir necha manbadan xususiyat olish kerak bo’lsa, interface ishlatiladi — bu ilg’or mavzu.
Xulosa
Bu bo’limda merosxo’rlikni, extends bilan asosiy va bola sinf munosabatini, super orqali ota sinfga murojaat va @Override bilan metodni qayta yozishni ko’rib chiqdik. Meros kodni qayta ishlatishni yangi darajaga olib chiqadi. Keyingi darsda polimorfizm — merosning eng kuchli davomiga o’tamiz.