118
15 bob. VORISLIKDAN FOYDALANISH ХUSUSIYAТLARI.
INТERFEYSLAR
15.1. Object: global supersinf. equals va toString usullari
Object sinfi hamma sinflar ajdodi hisoblanadi. Java tilida xar bir sinf Object
sinfini kengaytiradi. Lekin class Employee extends Oblects yozish shart emas. Agar
supersinf oshkor ko‘rsatilmagan bo‘lsa Object supersinf hisoblanadi. Java tilida xar
bir sinf Object sinfini kengaytirgani uchun Object sinfi imkoniyatlarini bilish
muximdir.
Object tipidagi o‘zgaruvchini ixtiyoriy tipdagi obyektga ilova sifatida ishlatish
mumkin:
Object obj = new Employee("Garri Хaker", 35000);
Bu tipdagi o‘zgaruvchidan foydalanish uchun avval boshlang‘ich tipni aniqlab,
tiplarni keltirishni amalga oshirish lozim:
Employee ye = (Employee) obj;
Object sinfining equals usuli ikki obyekt bir xilligini tekshiradi. Lekin equals
usuli Object sinfiga tegishli bo‘lgani uchun, ikkalasi bir xotira qismiga ilova
qilganligini tekshiradi. Ikki obyekt ekvivalentligini tekshirish uchun equals usulini
qo‘shimcha yuklash lozim. Mukammal equals usuli yaratish qoidalari.
1. Oshkor otherObject parametrini chaqirish — keyinchalik uning tipini other
deb atalgan boshqa o‘zgaruvchi tipiga keltirish lozim.
2. Тekshirish, this va otherObject ilovalar bir xilmi:
i f ( this == otherObject)
return true;
Odatda obyektlar maydonini solishtirgandan ko‘ra ilovalarni solishtirish osondir.
3. Тekshirish otherObject ilova nulga (null) tengmi. Agar xa bo‘lsa false qiymat
qaytarish. Bu tekshirishni albatta amalga oshirish lozim.
if (otherObject == null)
return false;
4. Тekshirish this va other obyektlari bitta sinfga tegishlimi.
Bu tekshirish "simmetriklik qoidasiga " ko‘ra majburiydir.
if (getClass() != otherObject.getClass()) return false;
5. Тalab qilingan sinf o‘zgaruvchisiga otherObject obyektini o‘zgartirish:
119
ClassName other = (ClassName)otherObject;
6. Хamma maydonlarni solishtirish. Asosiy tipdagi maydonlar uchun ==
operatori, obyektli maydonlar uchun —equals usuli qo‘llanadi. Agar ikki obyekt
hamma mydonlari bir xil bo‘lsa true qaytarish, aks holda false.
return fieldl == other.fieldl
&& field.2. equals (other . field2)
Masalan.
class Employee{
public boolean equals(Object otherObject) {
// Obyektlarni tez solishtirish,
if (this == otherObject) return true;
// Agar oshkor parametr — null, false qiymat qaytaradi,
if (otherObject == null) return false;
// Agar
sinflar ustma ust tushmasa, ular ekvivalent emas.
if (getClass () != otherObject.getClassO) return false;
// Obyekt otherObject tipi Employee va u nulga teng emas.
Employee other = (Employee) otherObject;
// Obyektlar
maydonlarini solishtirish,
return name.equals(other.name)
&& salary = other.
salary
&& hireDay.equals(other.hireDay);
}
}
Obyekt tipini getClass usuli orqali aniqlanadi. Obyektlar o‘zaro teng bo‘lishi
uchun bir sinf obyektlari bo‘lishlari kerak.
Voris ichida avvval spersinf equals usulini chaqirish lozim. Agar bu tekshirish
false qiymat qaytarsa, demak obyektlar teng emas. Agar tekshirish muvaffaqiyatli
bajarilsa ostki sinf maydonlarini tekshirishga o‘tish mumkin.
Masalan quyidagicha.
class Manager
extends Employee
122
chaqirishga imkon beradi. Shuning uchun dastur trassirovkasida, quyidagi
ifodalardan foydalanish mumkin
System.out.println{"Joriy xolat = " + position);
Dostları ilə paylaş: