logo

Interfață în Java

  1. Interfață
  2. Exemplu de interfață
  3. Moștenire multiplă prin interfață
  4. De ce moștenirea multiplă este acceptată în Interfață în timp ce nu este acceptată în cazul clasei.
  5. Interfață de marcare
  6. Interfață imbricată

Un interfață în Java este un plan al unei clase. Are constante statice și metode abstracte.

Interfața în Java este un mecanism de realizat abstractizare . În interfața Java pot exista doar metode abstracte, nu corpul metodei. Este folosit pentru a realiza abstractizare și multiple moștenire în Java .

Cu alte cuvinte, puteți spune că interfețele pot avea metode și variabile abstracte. Nu poate avea un corp de metodă.

De asemenea, interfața Java reprezintă relația IS-A .

Nu poate fi instanțiată la fel ca clasa abstractă.

Din Java 8, putem avea metode implicite și statice într-o interfață.

Din Java 9, putem avea metode private într-o interfață.

De ce să folosiți interfața Java?

Există în principal trei motive pentru a utiliza interfața. Ele sunt date mai jos.

  • Este folosit pentru a realiza abstractizarea.
  • Prin interfață, putem sprijini funcționalitatea moștenirii multiple.
  • Poate fi folosit pentru a obține o cuplare liberă.
De ce să folosiți interfața Java

Cum se declară o interfață?

O interfață este declarată folosind cuvântul cheie interfață. Oferă o abstractizare totală; înseamnă că toate metodele dintr-o interfață sunt declarate cu corpul gol, iar toate câmpurile sunt publice, statice și finale în mod implicit. O clasă care implementează o interfață trebuie să implementeze toate metodele declarate în interfață.

Sintaxă:

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

Îmbunătățirea interfeței Java 8

De cand Java 8 , interfața poate avea metode implicite și statice, despre care se discută mai târziu.

Adăugarea internă de către compilator

Compilatorul Java adaugă cuvinte cheie publice și abstracte înainte de metoda interfeței. Mai mult, adaugă cuvinte cheie publice, statice și finale înaintea membrilor de date.

Cu alte cuvinte, câmpurile de interfață sunt publice, statice și finale în mod implicit, iar metodele sunt publice și abstracte.

interfata in java

Relația dintre clase și interfețe

După cum se arată în figura de mai jos, o clasă extinde o altă clasă, o interfață extinde o altă interfață, dar a clasa implementează o interfață .

Relația dintre clasă și interfață

Exemplu de interfață Java

În acest exemplu, interfața Printable are o singură metodă, iar implementarea ei este furnizată în clasa 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(); } } 
Testează-l acum

Ieșire:

 Hello 

Exemplu de interfață Java: desenabile

În acest exemplu, interfața Drawable are o singură metodă. Implementarea sa este asigurată de clasele Rectangle și Circle. Într-un scenariu real, o interfață este definită de altcineva, dar implementarea ei este asigurată de diferiți furnizori de implementare. Mai mult, este folosit de altcineva. Partea de implementare este ascunsă de utilizatorul care utilizează interfața.

Fișier: 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(); }} 
Testează-l acum

Ieșire:

 drawing circle 

Exemplu de interfață Java: Bank

Să vedem un alt exemplu de interfață java care oferă implementarea interfeței Bank.

Fișier: 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()); }} 
Testează-l acum

Ieșire:

 ROI: 9.15 

Moștenire multiplă în Java după interfață

Dacă o clasă implementează mai multe interfețe sau o interfață extinde mai multe interfețe, aceasta este cunoscută ca moștenire multiplă.

moștenire multiplă în java
 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(); } } 
Testează-l acum
 Output:Hello Welcome 

Î) Moștenirea multiplă nu este acceptată prin clasă în java, dar este posibilă printr-o interfață, de ce?

După cum am explicat în capitolul Moștenire, moștenirea multiplă nu este acceptată în cazul clasă din cauza ambiguității. Cu toate acestea, este acceptat în cazul unei interfețe deoarece nu există ambiguitate. Se datorează faptului că implementarea sa este asigurată de clasa de implementare. De exemplu:

 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(); } } 
Testează-l acum

Ieșire:

listare java
 Hello 

După cum puteți vedea în exemplul de mai sus, interfața Printable și Showable au aceleași metode, dar implementarea sa este furnizată de clasa TestTnterface1, deci nu există ambiguitate.


Moștenirea interfeței

O clasă implementează o interfață, dar o interfață extinde o altă interfață.

 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(); } } 
Testează-l acum

Ieșire:

 Hello Welcome 

Metoda implicită Java 8 în interfață

Din Java 8, putem avea corpul metodei în interfață. Dar trebuie să o facem ca metodă implicită. Să vedem un exemplu:

Fișier: 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(); }} 
Testează-l acum

Ieșire:

 drawing rectangle default method 

Metoda statică Java 8 în interfață

Din Java 8, putem avea metoda statică în interfață. Să vedem un exemplu:

Fișier: 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)); }} 
Testează-l acum

Ieșire:

 drawing rectangle 27 

Î) Ce este interfața marcatoare sau etichetată?

O interfață care nu are niciun membru este cunoscută sub numele de interfață marcatoare sau etichetată, de exemplu, Serializabil , Cloneable, Remote, etc. Sunt folosite pentru a furniza câteva informații esențiale JVM-ului, astfel încât JVM-ul să poată efectua o operațiune utilă.

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

Interfață imbricată în Java

Notă: O interfață poate avea o altă interfață care este cunoscută ca interfață imbricată. O vom învăța în detaliu în clase imbricate capitol. De exemplu:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Mai multe despre interfața imbricată