DINAMIK METODLARNI BELGILASH
Kelinglar misol sifatida ikki sinfni ko’rib chiqamiz. Ular oddiy sinfosti va
supersinfga ega. Supersinfning yagona metodi sinfostiga aralashgan.
class A { void callme() {
Console.Write ("Inside A's callrne method");
class В extends A { void callme() {
Console.Write ("Inside B's callme method");
} }
class Dispatch {
public static void main(String args[]) {
59
A a = new B();
a.callme();
} }
E’tibor bering – main metodi ichida biz parametrli sinf e’lon qildik,buni biz sinf
oby’ektiga jo’natma bilan inisiallashtiramiz.Keyingi satrda biz callme metodini
chaqirdik.
Natija:
Inside B's calime method
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();
}
}
}
|