— Salom, Amigo! Bugun senga kashfiyotlar kuni. Yangi va qiziqarli mavzu - bu interfeyslar.
— Ha. Shunday ajoyib kun, uyga borib to'la vannada cho'milishni rejalashtiryapman.
— Interfeys – bu Abstraksiya va Polimorfizmning farzandi. Interfeys juda abstrakt klassga o'xshaydi, u yerda hamma metodlar abstrakt. U klass kabi e'lon qilinadi, faqat kalit so'zi interface ishlatiladi. Misollar:
| Kod | Tavsif va Faktlar |
|---|---|
|
1) class o'rniga interface yozamiz. 2) Faqat abstrakt metodlarni o'z ichiga oladi (abstrakt so'zini yozish shart emas). 3) Aslida interfeyslarning barcha metodlari — public. |
|
Interfeys faqat interfeyslardan meros olishi mumkin. Interfeyslarning ota-onalari ko'p bo'lishi mumkin. |
|
Klass bir nechta interfeyslardan (va faqat bitta klassdan) meros olish mumkin. Bunda implements kalit so'zi ishlatiladi. Klass Ya'ni klass |
— Qiziq. Interfeyslar nima uchun kerak? Ularni qachon ishlatamiz?
— Interfeyslarning klasslarga nisbatan ikki kuchli ustunligi bor:
1) «Metodlar tavsifi»ni ularning amalga oshirilishidan ajratish.
Avvalroq senga aytgan edim, agar sen o'zingning klasslaring metodlarini boshqa klasslardan chaqirishga ruxsat bermoqchi bo'lsang, ularni public kalit so'zi bilan belgilash kerak. Agar faqat o'z klassingdan chaqirishni istasang, ularni private kalit so'zi bilan belgilash kerak. Boshqa so'zlar bilan aytganda, biz klass metodlarini ikki kategoriya ajratamiz: «hamma uchun» va «faqat o'zimiz uchun».
Interfeyslar yordamida, bu bo'linishni yanada kuchaytirish mumkin. Biz maxsus «hamma uchun klass» va «o'zimiz uchun klass» yaratamiz, ikkinchisi birinchisidan meros oladi. Bu taxminan quyidagicha:
class Student
{
private String name;
public Student(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
private void setName(String name)
{
this.name = name;
}
interface Student
{
public String getName();
}
class StudentImpl implements Student
{
private String name;
public StudentImpl(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
private void setName(String name)
{
this.name = name;
}
}
public static void main(String[] args)
{
Student student =
new Student("Alibaba");
System.out.println(student.getName());
}
public static void main(String[] args)
{
Student student =
new StudentImpl("Ali");
System.out.println(student.getName());
}
Biz klassimizni ikkiga ajratdik: interfeys va interfeysdan meros olgan klass.
— Va bunda qanday ustunlik bor?
— Bitta interfeysni (meros olish) turli klasslar amalga oshirishi mumkin. Har birida o'zining o'ziga xos harakati bo'lishi mumkin. Xuddi ArrayList va LinkedList – bu interfeys Listning ikki turli amalga oshirilishi.
Shunday qilib, biz nafaqat turli amalga oshirilishlarni yashiramiz, balki uni saqlovchi klassni ham yashiramiz (kodingizda faqat interfeys ko'rinishi mumkin). Bu dastur bajarilishi davomida, obyektlarni boshqalar bilan almashtirishga, obyektning harakatini uni ishlatuvchi barcha klasslardan yashirishga imkon beradi.
Bu polimorfizm bilan birgalikda juda kuchli texnologiya. Hozircha buni nima uchun qilish kerakligi aniq emas. Avvalo, o'nlab yoki yuzlab klasslardan iborat dasturlar bilan to'qnashishingiz kerak, interfeyslar sizning hayotingizni sezilarli darajada soddalashtirishi mumkinligini tushunishingiz uchun.
2) Ko'p martalik meros olish.
Java da barcha klasslar faqat bitta ota-bobo klassga ega bo'lishi mumkin. Boshqa dasturlash tillarida, klasslar tez-tez bir necha ota-bobo klasslarga ega bo'lishi mumkin. Bu juda qulay, ammo ko'plab muammolarni ham keltirib chiqaradi.
Javada bunga murosaga kelindi – klasslarning ko'p martalik meros olishini taqiqlash, lekin interfeyslarning ko'p martalik meros olishiga ruxsat berildi. Interfeys bir nechta interfeys ota-onalariga ega bo'lishi mumkin. Klass bir nechta interfeys ota-onalariga va faqat bitta ota-klassga ega bo'lishi mumkin.
GO TO FULL VERSION