Ushbu dasturda
Olma
klassi
MevaliDaraxt
va
Daraxt
klass a’zolarini o’z ichiga oladi.
Yuqoridagi klass ierarxiyasi quyidagi rasmda keltirilgan:
Klass ierarxiyasi
Klass biror bir klassni kengaytirsa u kengaytirilayotgan klass metodlarini meros qilib oladi.
Agar meros qilib olinayotgan metod bajarilishi to’g’ri kelmasa yoki o’zgacha bajarish kerak
bo’lsa meros qilib olingan metodni
qayta yaratish
mumkin. Masalan:
public
class Xisoblagich
{
public float xisoblash(int a, int b)
{
float c = (a+b)/2;
return c;
}
}
public class Kalkulyator extends Xisoblagich
{
public float xisoblash(int a, int b)
{
float c = (a*b)/2;
return c;
}
}
Yuqoridagi dasturda
Xisoblagich
klassi
xisoblash()
metodini e’lon qilib, ushbu metod
qabul qilgan ikki butun sonni o’rta arifmetik qiymatini xisoblab qaytaradi.
Kalkulyator
klassi
Xisoblagich
klassini kengaytirib
xisoblash()
metodini meros qilib olib uni qayta yaratadi va
endi
xisoblash()
metodi qabul qilgan ikki butun sonni o’rta geometrigini xisoblab beradi.
Kalkulyator k = new Kalkulyator();
k.xisoblash(4,5);
Daraxt
MevaliDaraxt
Olma
Dastur kodida xisoblash metodi 10 qiymatini qaytaradi. Shuni ta’kidlab o’tish kerakki
metodni qayta yaratayotganda metod qaytarayotgan va qabul qilayotgan qiymat turlari bir xil
bo’lishi kerak.
Klass ikkinchi klassni kengaytirganda u kengaytirayotgan klass metodlarini a’zo sifatida
meros qilib oladi va meros qilib olgan metodlarni bevosita ishlatishi yoki
qayta yaratishi
mumkin. Java dasturlash tilida klasslarda
abstrakt
metodlar mavjudki, ularni meros qilib olgan
ostki klasslar albatta qayta yaratishi kerak bo’ladi. Abstrakt metodlar oddiy metodlardan farqi
shundaki, ularda metod tanasi mavjud bo’lmaydi. Masalan:
public void go()
{
}
public abstract void go();
Yuqoridagi birinchi metod oddiy metod xisoblanadi. Uni tanasi mavjud bo’lib figurali
qavslar bilan belgilanadi. Ikkinchi metod abstrakt metod xisoblanib tanaga ega bo’lmaydi. Bitta
abstrakt metodi mavjud klass xam abstrakt klass xisoblanadi. Abstrakt klasslarni abstrakt
bo’lmagan metodlari xam mavjud bo’lishi mumkin. Abstrakt klasslar obyekt yaratish uchun
andoza xisoblanmaydi, balki ularni kengaytirgan, abstrakt bo’lmagan
klasslar uchun meros qilib
oladigan metodlarni qayta yaratish shartnomasi xisoblanadi.
Masalan:
public abstract class Avtomobil
{
public abstract void tezlashish();
public void yurish()
{
//metod tanasidagi yurish kidi
…
}
}
public class YukAvtomobili extends Avtomobil
{
public void tezlashish()
{
//yuk avtomobiliga xos tezlashish kodi
…
}
public void yukTashish()
{
//
yuk tashish kodi
…
}
}
Yuqoridagi dasturda abstrakt
Avtomobil
klassi berilgan bo’lib uning bitta abstrakt va bitta
oddiy metodi mavjud.
Avtomobil
klassi uni kengaytiradigan barcha klasslarda (masalan,
YukAvtomobili
,
YengilAvtomobil
)
tezlashish()
metodi mavjud bo’lish shartnomasini taklif
etadi. Ya’ni
Avtomobil
klassini kengaytirgan klass
tezlashish()
metodini ushbu klassga xos
amalni bajaradigan qilib qayta yaratishi kerak. Yuqoridagi misolda
YukAvtomobili
klassi
tezlashish()
metodini yuk avtomobillarga xos qilib qayta yaratgan. Bundan tashqari ushbu
klassda yangi
yukTashish()
metodi xam e’lon qilingan.
YukAvtomobili
jami uchta metodni, ya’ni
meros qilib olingan
yurish()
metodi, meros qilib olingan va qayta yaratilgan
tezlashish()
metodi va o’zida e’lon qilingan
yukTashish()
metodi.
Dostları ilə paylaş: