- Sučelje
- Primjer sučelja
- Višestruko nasljeđivanje po sučelju
- Zašto je višestruko nasljeđivanje podržano u sučelju, a nije podržano u slučaju klase.
- Sučelje markera
- 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.
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.
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 .
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.
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