19. Interfejs u Javi

Interfejs u javi je nacrt (blueprint) klase. On ima samo statičke konstante i apstraktne metode.
Interfejs u javi je mehanizam za postizanje potpune apstrakcije. U java interfejsu mogu postojati samo apstraktni metodi bez tijela metoda. On se koristi za postizanje pune apstrakcije i višestrukog nasljeđivanja u Javi.
Java Interfejs takođe predstavlja IS-A relaciju.
On ne može biti instanciran kao ni apstraktna klasa.

Zašto se koristi interfejs?
Postoje uglavnom tri razloga za upotrebu interfejsa. To su:

Napomena 1: Java kompajler dodaje ključne riječi public i abstract prije metoda interfejsa i ključne riječi public, static i final prije podataka-članova.
Drugim riječima, polja interfejsa su public, static i final po default-u, a metodi su public i abstract.

Razumijevanje odnosa između klasa i interfejsa
Kao što je prikazano na sljedećoj slici, klasa nasljeđuje drugu klasu, interfejs nasljeđuje drugi interfejs ali klasa implementira interfejs.

Jednostavan primjer java interfejsa
U ovom primjeru, interfejs Printable ima samo jedan metod, njegova implementacija je obezbjeđena u klasi A.

interface printable{  
void print();  
}  
  
class A6 implements printable{  
public void print(){System.out.println("Hello");}  
  
public static void main(String args[]){  
A6 obj = new A6();  
obj.print();  
 }  
}
Ispis na ekranu:
Hello

Višestruko nasljeđivanje u Javi pomoću interfejsa

Ako klasa implementira više interfejsa, ili interfejs nasljeđuje više interfejsa to je poznato kao višestruko nasljeđivanje (multiple inheritance).

interface Printable{  
void print();  
}  
  
interface Showable{  
void show();  
}  
  
class A7 implements Printable,Showable{  
  
public void print(){System.out.println("Hello");}  
public void show(){System.out.println("Welcome");}  
  
public static void main(String args[]){  
A7 obj = new A7();  
obj.print();  
obj.show();  
 }  
}
Ispis na ekranu:
Hello
Welcome

Zašto višestruko nasljeđivanje nije podržano preko klasa u javi ali je moguće pomoću interfejsa?
Kao što je rečeno u poglavlju o nasljeđivanju, višestruko nasljeđivanje nije podržano u slučaju klasa. Međutim, podržano je u slučaju interfejsa zato što nema dvosmislenosti jer je implementacija obezbijeđena preko implementacione klase. Na primjer:

interface Printable{  
void print();  
}  
  
interface Showable{  
void print();  
}  
  
class testinterface1 implements Printable,Showable{  
  
public void print(){System.out.println("Hello");}  
  
public static void main(String args[]){  
testinterface1 obj = new testinterface1();  
obj.print();  
 }  
}
Ispis na ekranu:
Hello

Kao što se može vidjeti u ovom primjeru, Printable i Showable interfejs imaju iste metode ali njihovu implementaciju obezbjeđuje klasa A, tako da nema dvosmislenosti.

Nasljeđivanje interfejsa

Klasa implementira interfejs ali jedan interfejs nasljeđuje drugi interfejs.

interface Printable{  
void print();  
}  
interface Showable extends Printable{  
void show();  
}  
class Testinterface2 implements Showable{    

public void print(){System.out.println("Hello");}  
public void show(){System.out.println("Welcome");}  
  
public static void main(String args[]){  
Testinterface2 obj = new Testinterface2();  
obj.print();  
obj.show();  
 }  
}
Ispis na ekranu:
Hello
Welcome

Šta je marker ili tagovani interfejs?

Interfejs koji nema članova je poznat kao marker ili tagovani interfejs. Na primjer: Serializable, Cloneable, Remote itd. Oni se koriste da obezbijede neke suštinske informacije za JVM tako da JVM može izvoditi neke korisne operacije.

// Kako je napisan interfejs Serializable?  
public interface Serializable{  
}

Ugniježdeni (nested) interfejs u javi

Napomena 2: Jedan interfejs može imati drugi interfejs i to je poznato kao ugniježdeni interfejs. Na primjer:

interface printable{  
 void print();  
 interface MessagePrintable{  
   void msg();  
 }  
}

Objektno orijentisano programiranje u Javi    Index