C# dasturlash tilida sinflar ierarxiyasini tashkil etish
Sinf osti va sinf usti munosabatlari
Download 1.16 Mb. Pdf ko'rish
|
c dasturlash tilida sinflar ierarxiyasini tashkil etish
- Bu sahifa navigatsiya:
- Obyekt o’zgaruvchilari tiplarini keltirish(casting)
2.2. Sinf osti va sinf usti munosabatlari
Super sinf va sinf osti Sinf osti tipidagi ob’ektga ko’rsatkichni supersinf tipidagi o’zgaruvchiga qiymat qilib uzatish mumkin, lekin teskarisi o’rinli emas. Ya’ni har qanday ishchi menedjer bo’la olmaydi Kengaytirilishi mumkin bo’lmagan sinf “terminal” sinf deb ataladi. Buning uchun sinfga “final” modifikatori qo’yiladi. Alohida olingan metod ham “final” bo’lishi mumkin. bunday metod sinf ostida qayta aniqlanishi mumkin emas. Agar sinf “final” bo’lsa uning maydonlari final bo’lishi shart emas. Buning uchun har bir maydon “final” bo’lishi lozim. Terminal sinf xusuiyatlari: effektivlik (“Inline”) metodlar uchun statik bog’lanish ishlaydi, ya’ni metod chaqirilganda uning kodi qanday bo’lishini kompilyator biladi xavfsizlik. Agar supersinf tipidagi o’zgaruvchi sinf osti ob’ektiga ko’rsatsa bu ko’rsatkichni sinf osti sinfi ob’ektiga ko’rsatkich qilib o’zgartirish (keltirish) mumkin. Obyekt o’zgaruvchilari tiplarini keltirish(casting) Keltirish faqat sinf ierarxiyasi ichida (tepadan pastga qarab) bajarilishi mumkin Agar o’zgaruvchi sinf osti ob’ektiga ko’rsatmasa uni sinf ostiga keltirish mumkin emas (favqulotda hodisa ro’y beradi) 60
Keltirish quyidagicha amalga oshiriladi if (B instanceof A) { A boss = (A) B;} Ob’ekt o’zgaruvchilari ustida keltirish operatsiyasini iloji bo’lsa ishlatmaslik kerak. Ob’ektlilik buziladi Uchburchak sinfiga misol: using
System; using
System.Text; namespace sinf1 {
public
class uchburchak {
int a;
int
b;
int c;
public
uchburchak( int
x, int
y, int
z) { a = x; b = y; c = z; }
public
int perimetr() { return
a + b + c; }
public
int getA() { return
a; }
public
int getB() { return
b; }
public
void setA( int
x) { a = x; } }
public
class
tuchburchak : uchburchak {
//public tuchburchak(int x, int y, int z) { a = x; b = y; c = z; }
public tuchburchak( int x,
int y,
int z):
base (x,y,z) {}
public
double
yuza() { return
getA()*getB()/2.0; } }
class
Program
61
{ static
void
Main( string
[] args) {
uchburchak U = new
uchburchak (3, 4,5);
tuchburchak T=
new
tuchburchak (3,4,5);
int x = U.perimetr(); Console
.WriteLine(x);
//Console.WriteLine(U.getA());
// U.setA(7);
//Console.WriteLine(U.getA());
Console .WriteLine(T.yuza());
Console
.ReadKey(); } } }
[ Supersinf barcha maydonlari va metodlari meros qilib sinf ostiga beriladi. Sinf osti qo’shimcha maydon va metodlar yasashi va meros qilib olingan metodni qayta aniqlashi mumkin. Agar sinf osti metodi qayta aniqlangan supersinf metodi bo’lsa, supersinfning metodiga “super” old qo’shimcha orqali murojaat qilinadi Supersinf konstruktoriga super(…) ko’rinishida murojaat qilinadi Agar sinf osti konstruktoridan supersinf konstruktoriga murojaat qilinmasa supersinfning parametirsiz konstruktori chaqiriladi. Agar parametrsiz konstruktor aniqlanmagan bo’lsa kompilyator xato haqida xabar beradi (odam, ishchi,talaba misolida) |
ma'muriyatiga murojaat qiling