123
Employee staff[] = new Employee[10];
Employee harry;
int n = find(staff, harry);
SHuni ta’kidlab o‘tish lozimki Object[ ] tpi massivini faqat biror sinf obyektlari
massiviga aylantirish mumkin. Preobrazovat massiv tipa int[ ] v massiv tipa Object[]
tipi massiviga int[ ] tipi massivini o‘zgartirish mumkin emas.
Agar biror
sinf obyektlaridan massiv, Object[ ] tipidagi massivga aylantirilsa,
umumlashgan massiv boshlang‘ich tip xaqidagi ma’lumotni o‘zida saqlab qoladi. Bu
massivga boshqa tipdagi elementni joylashtirish mumkin emas.
15.3. Interfeys ta’rifi. Operator interface. Operator implements
Interfeys
—
bu usullar jamlamasi oshkor spetsifikatsiyasi bo‘lib, shu
spetsifikatsiyani realizatsiya qilayotgan sinfda bu usullar ta’rifi albatta berilishi
lozim. Interfeysda bu usullar realizatsiyasi berilmaydi.
Abstrakt sinflar kabi
interfeyslar ko‘plik vorislikda foydalanishi mumkin. Konkret sinf faqat bitta
supersinf vorisi bo‘lishi mumkin lekin cheklanmagan sondagi interfeyslar realizatsiya
qilinishi mumkin.
Java tilida interfeyslar usullarni dastur bajarilishi davomida dinamik qo‘llashni
(resolution) amalga oshirish uchun ishlatiladi. Interfeyslar sinflarga o‘xshaydi, lekin
usullar realizatsiyasi bo‘lmaydi. Sinf ixtiyoriy sondagi interfeysga ega bo‘lishi
mumkin. Sinfda interfeylar usulari to‘la to‘plamini realizatsiya qilish lozim. Sinf bu
usullari signaturasi shu sinf realizatsiya qilayotgan iterfeys usullari signaturasi bilan
bir xil bo‘lishi lozim. Interfeyslar sinflar vorislikka asoslangan
iyerarxiyasi bilan
kesishmaydigan o‘z iyerarxiyasiga ega. Bu vorislik iyerarxiyasi bilan bog‘lanmagan
turli sinflarda bitta intrfeysni realizatsiya qilishga imkon beradi. Interfeyslar kuchi
shundan iborat. Interfeyslar C++ tilida ko‘plik vorislik mexanizmi analogidir, lekin
ulardan foydalanish qulayroq
Interfeys ta’rifi sinf ta’rifiga o‘xshash, farqi shundaki interfeysda ma’lumotlar
e’loni va konstruktorlar yo‘qdir. Interfeys ta’rifi umumiy ko‘rinishi:
interface nom { natija_tipi usul_nomi1(parametrlar ro‘yxati);
124
tip final1_o‘zgaruvchi_ismi = qiymat; }
Interfeysda e’lon qilingan usullar tanasi yo‘qdir. Interfeysda e’lon qilingan
o‘zgaruvchilar ko‘zda tutilgan bo‘yicha final – o‘zgaruvchilar hisoblanadi.
Shuning
uchun realizatsiya qiluvchi sinfda ularning qiymatini o‘zgartirish mumkin emas.
Bundan tashqari o‘zgaruvchilarni interfeysda ta’riflanganda konstanta qiymat bilan
initsializatsiya qilinishi kerak. Quyida callback nomli usulga ega va int tipidagi
parametrga ega interfeys ta’rifi berilgan.
interface Callback { void callback(int param); }
Operator implements — biror interfeys yoki interfeyslarni
realizatsiya qiluvchi
sinf ta’rifiga qo‘shimchadir
class sinf_nomi [extends supersinf]
[implements interfeys0 [, interfeys1...]] { sinf tanasi }
Agar sinfda bir nechta interfeyslar realizatsiya qilinsa, ularning nomlari vergul
bilan ajratiladi. Quyida interfeysni realizatsiya qiluvchi sinfga misol berilgan:
class Client implements Callback {
void callback(int p) { System.out.println("callback called with " + p);
} }
Quyidagi misolda odin ta’rifi berilgan interfeys callback usuli, interfeysga ilova
– o‘zgaruvchi orqali chaqiriladi:
class TestIface { public static void main(String args[]) { Callback s = new
client();
c.callback(42); } }
Quyida dastur bajarilishi natijasi beilgan:
S:\> Java TestIface
callback called with 42
Dostları ilə paylaş: