logo

Sučelje u Javi

  1. Sučelje
  2. Primjer sučelja
  3. Višestruko nasljeđivanje po sučelju
  4. Zašto je višestruko nasljeđivanje podržano u sučelju, a nije podržano u slučaju klase.
  5. Sučelje markera
  6. Ugniježđeno sučelje

An sučelje u Javi je nacrt klase. Ima statičke konstante i apstraktne metode.

Sučelje u Javi je mehanizam za postizanje apstrakcija . U Java sučelju mogu postojati samo apstraktne metode, a ne tijelo metode. Koristi se za postizanje apstrakcije i višestruke nasljeđivanje u Javi .

Drugim riječima, možete reći da sučelja mogu imati apstraktne metode i varijable. Ne može imati tijelo metode.

bash za petlju

Java sučelje također predstavlja odnos IS-A .

Ne može se instancirati kao apstraktna klasa.

Od Jave 8, možemo imati zadane i statičke metode u sučelju.

Od Jave 9, možemo imati privatne metode u sučelju.

Zašto koristiti Java sučelje?

Postoje uglavnom tri razloga za korištenje sučelja. Oni su navedeni u nastavku.

  • Koristi se za postizanje apstrakcije.
  • Pomoću sučelja možemo podržati funkcionalnost višestrukog nasljeđivanja.
  • Može se koristiti za postizanje labavog spoja.
Zašto koristiti Java sučelje

Kako deklarirati sučelje?

Sučelje se deklarira pomoću ključne riječi interfejs. Pruža potpunu apstrakciju; znači da su sve metode u sučelju deklarirane s praznim tijelom, a sva su polja prema zadanim postavkama javna, statična i konačna. Klasa koja implementira sučelje mora implementirati sve metode deklarirane u sučelju.

obrnuti niz java

Sintaksa:

 interface { // declare constant fields // declare methods that abstract // by default. } 

Poboljšanje Java 8 sučelja

Od Java 8 , sučelje može imati zadane i statičke metode o čemu će biti riječi kasnije.

Interno dodavanje od strane prevoditelja

Java prevoditelj dodaje javne i apstraktne ključne riječi prije metode sučelja. Štoviše, dodaje javne, statične i konačne ključne riječi prije članova podataka.

Drugim riječima, polja sučelja su prema zadanim postavkama javna, statična i konačna, a metode su javne i apstraktne.

sučelje u Javi

Odnos između klasa i sučelja

Kao što je prikazano na donjoj slici, klasa proširuje drugu klasu, sučelje proširuje drugo sučelje, ali a klasa implementira sučelje .

Odnos između klase i sučelja

Primjer Java sučelja

U ovom primjeru sučelje za ispis ima samo jednu metodu, a njegova implementacija je osigurana u klasi A6.

 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(); } } 
Testirajte sada

Izlaz:

apstraktna klasa java
 Hello 

Primjer Java sučelja: mogućnost crtanja

U ovom primjeru sučelje Drawable ima samo jednu metodu. Njegovu implementaciju osiguravaju klase Rectangle i Circle. U stvarnom scenariju, sučelje je definirao netko drugi, ali njegovu implementaciju pružaju različiti dobavljači implementacije. Štoviše, koristi ga netko drugi. Implementacijski dio skriven je od strane korisnika koji koristi sučelje.

Datoteka: TestInterface1.java

 //Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }} 
Testirajte sada

Izlaz:

 drawing circle 

Primjer Java sučelja: Banka

Pogledajmo još jedan primjer java sučelja koje pruža implementaciju Bank sučelja.

Datoteka: TestInterface2.java

 interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }} 
Testirajte sada

Izlaz:

 ROI: 9.15 

Višestruko nasljeđivanje u Javi prema sučelju

Ako klasa implementira više sučelja ili sučelje proširuje više sučelja, to je poznato kao višestruko nasljeđivanje.

višestruko nasljeđivanje u Javi
 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(); } } 
Testirajte sada
 Output:Hello Welcome 

P) Višestruko nasljeđivanje nije podržano kroz klasu u Javi, ali je moguće preko sučelja, zašto?

Kao što smo objasnili u poglavlju o nasljeđivanju, višestruko nasljeđivanje nije podržano u slučaju razreda zbog dvosmislenosti. Međutim, podržan je u slučaju sučelja jer nema dvosmislenosti. To je zato što njegovu implementaciju osigurava klasa implementacije. Na primjer:

 interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } } 
Testirajte sada

Izlaz:

char u int java
 Hello 

Kao što možete vidjeti u gornjem primjeru, sučelje Printable i Showable ima iste metode, ali njegovu implementaciju osigurava klasa TestTnterface1, tako da nema dvosmislenosti.


Nasljeđivanje sučelja

Klasa implementira sučelje, ali jedno sučelje proširuje drugo sučelje.

mamta kulkarni glumac
 interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } } 
Testirajte sada

Izlaz:

 Hello Welcome 

Zadana metoda Java 8 u sučelju

Od Jave 8 možemo imati tijelo metode u sučelju. Ali to moramo postaviti kao zadanu metodu. Pogledajmo primjer:

Datoteka: TestInterfaceDefault.java

 interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }} 
Testirajte sada

Izlaz:

 drawing rectangle default method 

Java 8 statička metoda u sučelju

Od Jave 8, možemo imati statičku metodu u sučelju. Pogledajmo primjer:

Datoteka: TestInterfaceStatic.java

 interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }} 
Testirajte sada

Izlaz:

 drawing rectangle 27 

P) Što je marker ili označeno sučelje?

Sučelje koje nema člana poznato je kao marker ili označeno sučelje, na primjer, Serializable , Cloneable, Remote, itd. Koriste se za pružanje nekih bitnih informacija JVM-u tako da JVM može izvesti neke korisne operacije.

 //How Serializable interface is written? public interface Serializable{ } 

Ugniježđeno sučelje u Javi

Napomena: sučelje može imati drugo sučelje koje je poznato kao ugniježđeno sučelje. To ćemo detaljno naučiti u ugniježđene klase poglavlje. Na primjer:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Više o ugniježđenom sučelju