Diger programlasdirma dillerinde olan multiple inheritence xususiyyeti Java dilinde yoxdur.Bunu berpa etmek ucun Javada Interface ve daxili siniflerden (Inner classes) istifade olunur.Interface siniflerle abstrakt sinifler arasinda araliq teskil edir. Interface sinife yol gostren bir xeritedir.Interface in esas vezifesi
abstrakt siniflerde oldugu kimi birlesdirici rol oynamasidir .Abstrakt sinifler daxilinde abstrakt metodlarla yanasi
hem de
adi metodlar ola biler.Amma Interface daxilinde yalniz govdesiz metodlar yer alir.
Sinif sinifden extends olunur,Interfaceden ise implements edilir.Qeyd edek ki bir sinif bir
nece Interface-i
implements ede biler.Hemin sinif daxilinde Interface-in govdesiz metodlari mutleq override edilmelidir.Interface daxilindeki govdesiz metodlar private ola bilmez.
Interface daxilindeki govdesiz metodlar avtomatik olaraq public olurlar ve bu deyisdirile bilmez.Eyni zamanda global saheler (alanlar) de avtomatik olaraq public , static ve final xususiyyetine malik olurlar ve deyisdirile bilmez.
Qeyd edek ki Interface in obyekti yaradilmaz.
Abstrakt sinif Interface-den implements edildikde bu sinif Interface daxilindeki abstrakt metodlari override etmelidirmi?Cavab:yox.
Cunki interface ve abstrakt siniflerin esas meqsedi oz alt siniflerine govdesiz metodlarini override etdirmekdir.
public void ovla();
}
public abstract class Pisik implements Heyvan{
public abstract void suic();
}
public class Aslan extends Pisik{
@Override
public void suic() {
System.out.println("Aslan su icir"); }
@Override
public void ovla() {
System.out.println("Aslan ovlayir");
}
}
Gorunduyu kimi Pisik abstrakat sinifi Heyvan Interface-si daxilindeki ovla() metodunu override etmek mecburiyyetinde deyildir. Amma Aslan sinifi Pisik abstrakt sinifinin ve Heyvan interface sinin alt sinifi oldugu ucun o mecburi olaraq ovla() ve suic() metodlarini override etmelidir.
Sinif sinifden extends edildiyi kimi Interface de Interfaceden extends edillir.Javada sinif yalniz bir sinifden extends olunur.Yeni "Javada bir sinifin yalniz bir anasi ola biler" .Amma Interface ise bele deyil.
public interface InterfaceA {
public void Java();
}
public interface InterfaceB {
public void Paskal();
}
public interface InterfaceC extends InterfaceB,InterfaceA{
public void C();
}
public class Test implements InterfaceC {
@Override
public void C() {
System.out.println("C 1970 de yaranan funksional programlasdirma dilidir ");
}
@Override
public void Paskal() {
System.out.println("Paskal 1968-1971 de yaranan prosedur programlsama dilidir");
}
@Override
public void Java() {
System.out.println("Java 1990 ilde yaranan Obyekt Yonlu Programlasma(OOP) dilidir");
}
public static void main(String[] args) {
Test test=new Test();
test.Paskal();
test.C();
test.Java();
}
}
Netice:
Paskal 1968-1971 de yaranan prosedur programlsama dilidir
C 1970 de yaranan funksional programlasdirma dilidir
Java 1990 ilde yaranan Obyekt Yonlu Programlasma(OOP) dilidir
Indi ise 3 sinifi Interface-e implements edib Poliformizmden istifade ederek sade bir program yazaq:
public interface Calisan {
public void calis();
}
public class Mudur implements Calisan {
@Override
public void calis() {
System.out.println("Mudur calisir");
}
}
public class MudurMuavini implements Calisan {
@Override
public void calis() {
System.out.println("MudurMuavini calisir");
}
}
public class Programci implements Calisan {
@Override
public void calis() {
System.out.println("Programci calisir");
}
}
public class IsYeri {
public static void Isebasla(Calisan[] c) {
for (int i = 0; i < c.length; i++) {
c[i].calis();
}
}
public static void main(String[] args) {
Calisan[] c = new Calisan[3];
c[0] = new Mudur();
c[1] = new MudurMuavini();
c[2] = new Programci();
Isebasla(c);
}
}
Netice :
Mudur calisir
MudurMuavini calisir
Programci calisir