Abstrakt sinflar tashkil etish va ulardan foydalanish usullari.
Abstract kalit so'zi bilan yaratilgan sinflar abstrakt sinflar deb nomlanadi.
Abstract sinflar abstakt
metodlar (tanasi yozilmagan metod) yoki abstrakt bo'lmagan metodlardan (tanasi yozilgan metod) tashkil
topgan bo'ladi.
Abstrakt class quyidagicha e'lon qilinadi:
abstract class A{}
Tanasi (implementation) yozilmagana va abstract kalit so'zi bilan yaratilgan metod — abstrakt metod
deyiladi.
abstract void funksiya(); // tanasi yo'q va asbtrakt
Abstrakt metodi bor bo'lgan abstrakt classga misol:
abstract class Motosikl{
abstract void run();
}
class Honda extends Motosikl{
void yurmoq(){System.out.println("Yurmoqda...");}
public static void main(String args[]){
Motosikl obj = new Honda();
obj.yurmoq();
}
}
Natija:
Yurmoqda...
Yuqoridagi misolda Honda classi bitta abstrakt metodi (yurmoq) bor bo'lgan
Motosikl abstarkt classidan
nasl olayapti va uning abstrakt classi tanasini realizatsiya qilayapti. Amaliyotda abstrakt class bir nechta
sinflar uchun ota class vazifasini bajaradi va abstrakt metodlar turli bola sinflarda turlicha realizatsiya
qilinadi. Shuningdek
abstrakt class konstruktor, tanasi bor metod, ma'lumotlar va hattoki main()
metodga
ega bo'lishi mumkin. Quyidagi misolga qarang:
abstract class Motosikl{
Motosikl(){System.out.println("Motosikl yaratildi");}
abstract void yurmoq();
void tezlikOshirish(){System.out.println("tezlik oshirildi");}
}
class Honda extends Motosikl{
void yurmoq(){System.out.println("yurmoqda...");}
}
class MainClass{
public static void main(String args[]){
Motosiklobj = new Honda();
obj.yurmoq();
obj.tezlikOshirish();
}
}
Natija:
Motosikl yaratildi
yurmoqda...
tezlik oshirildi
Esda tuting: Agar class tarkibida bitta bo'lsa ham abstarkt metod mavjud bo'lsa, class ham abstract bo'lishi
kerak. Agar biror class abstrakt classdan voris olsa uning barcha abstrakt metodlarini realizatsiya qilishi
kerak yoki o'zi ham abstrakt class bo'lishi kerak.
Oddiy darslardan tashqari C# da ham abstrakt sinflar mavjud. Sinflar odatda qandaydir ob'ekt yoki ob'ekt
uchun qandaydir rejani ifodalaydi. Masalan, avtomobillarni ifodalash uchun
Car sinfini yoki odamlarni
ifodalash uchun Person sinfini ushbu sinflarga ushbu ob'ektlarni tavsiflovchi tegishli xususiyatlar,
maydonlar va usullarni joylashtirish orqali belgilashimiz mumkin.
Biroq, biz dasturlash tilidan foydalangan holda ifodalamoqchi bo'lgan ba'zi ob'ektlar o'ziga xos dasturga
ega bo'lmasligi mumkin. Masalan, aslida bunday geometrik shakl yo'q. Doira, to'rtburchak, kvadrat bor,
lekin oddiygina raqam yo'q. Biroq, aylana ham, to'rtburchak ham umumiy narsaga ega va ular raqamlardir.
Va aniq amalga oshirishga ega bo'lmagan bunday ob'ektlarni tavsiflash uchun mavhum sinflar
mo'ljallangan. Abstrakt sinf oddiy sinfga o'xshaydi.
Bundan tashqari, o'zgaruvchilar, usullar,
konstruktorlar, xususiyatlar bo'lishi mumkin. Yagona narsa shundaki, mavhum
sinflarni belgilashda
mavhum kalit so'z ishlatiladi. Masalan, transport vositasini ifodalovchi mavhum sinfni aniqlaymiz:
Avtomobil ma'lum bir amalga oshirishga ega bo'lmagan ba'zi bir mavhumlikni ifodalaydi. Ya'ni,
mashinalar va yuk mashinalari, samolyotlar, kemalar bor, kimdir kosmik kemaga minishni yaxshi ko'radi,
ammo bunday transport vositasi yo'q. Biroq, barcha transport vositalarining
umumiy jihati bor - ular
harakatlana oladi. Va buning uchun sinfda harakatga taqlid qiluvchi Move usuli aniqlanadi. Ammo
mavhum sinflar va oddiy sinflar o'rtasidagi asosiy farq shundaki, biz sinfning namunasini yaratish uchun
mavhum sinf konstruktoridan foydalana olmaymiz. Masalan, quyidagicha:
Biroq, mavhum sinflar olingan sinflar meros qilib olishi va foydalanishi mumkin bo'lgan ba'zi umumiy
funktsiyalarni tavsiflash uchun foydalidir:
Bunday holda, Transport klassi har xil turdagi transport vositalarini ifodalovchi uchta sinfni meros qilib
oladi. Biroq, ularning bir umumiy tomoni bor - ular Move() usuli yordamida ko'chirilishi mumkin.
Yuqorida mavhum sinfning
konstruktoridan foydalanib, ushbu sinfning namunasini yaratish mumkin
emasligi haqida yozilgan edi. Biroq, bunday sinf konstruktorlarni ham belgilashi mumkin:
Bunday holda, konstruktor mavhum Transport sinfida aniqlanadi
- parametrdan foydalanib, u avtomobil
nomini saqlaydigan Name xususiyatining qiymatini o'rnatadi. Va bu holda, hosila sinflar o'zlarining
konstruktorlarida ushbu konstruktorni chaqirishlari kerak.