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();
}
}
}
Sinf osti
[ ] class : {
}
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)
62
Do'stlaringiz bilan baham: |