logo

Interfície en Java

  1. Interfície
  2. Exemple d'interfície
  3. Herència múltiple per interfície
  4. Per què s'admet l'herència múltiple a la interfície mentre no s'admet en cas de classe.
  5. Interfície de marcador
  6. Interfície anidada

An interfície en Java és un pla d'una classe. Té constants estàtiques i mètodes abstractes.

La interfície en Java és un mecanisme per aconseguir abstracció . Només hi pot haver mètodes abstractes a la interfície Java, no el cos del mètode. S'utilitza per aconseguir abstracció i múltiple herència en Java .

arbre binari en ordre de recorregut

En altres paraules, es pot dir que les interfícies poden tenir mètodes i variables abstractes. No pot tenir un cos de mètode.

Interfície Java també representa la relació IS-A .

No es pot instanciar igual que la classe abstracta.

Des de Java 8, podem tenir mètodes per defecte i estàtics en una interfície.

Des de Java 9, podem tenir mètodes privats en una interfície.

Per què utilitzar la interfície Java?

Hi ha principalment tres raons per utilitzar la interfície. Es donen a continuació.

convertir string a date
  • S'utilitza per aconseguir l'abstracció.
  • Per interfície, podem donar suport a la funcionalitat de l'herència múltiple.
  • Es pot utilitzar per aconseguir un acoblament solt.
Per què utilitzar la interfície Java

Com declarar una interfície?

Es declara una interfície utilitzant la paraula clau interfície. Proporciona una abstracció total; significa que tots els mètodes d'una interfície es declaren amb el cos buit i que tots els camps són públics, estàtics i finals per defecte. Una classe que implementa una interfície ha d'implementar tots els mètodes declarats a la interfície.

Sintaxi:

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

Millora de la interfície de Java 8

Des de Java 8 , la interfície pot tenir mètodes per defecte i estàtics que es comentaran més endavant.

Addició interna del compilador

El compilador Java afegeix paraules clau públiques i abstractes abans del mètode d'interfície. A més, afegeix paraules clau públiques, estàtiques i finals abans que els membres de les dades.

En altres paraules, els camps de la interfície són públics, estàtics i finals per defecte, i els mètodes són públics i abstractes.

interfície en java

La relació entre classes i interfícies

Com es mostra a la figura següent, una classe amplia una altra classe, una interfície amplia una altra interfície, però a class implementa una interfície .

La relació entre classe i interfície

Exemple d'interfície Java

En aquest exemple, la interfície Printable només té un mètode i la seva implementació es proporciona a la classe 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(); } } 
Prova-ho ara

Sortida:

 Hello 

Exemple d'interfície Java: Dibuixable

En aquest exemple, la interfície Drawable només té un mètode. La seva implementació la proporcionen les classes Rectangle i Circle. En un escenari real, una altra persona defineix una interfície, però la seva implementació la proporcionen diferents proveïdors d'implementació. A més, és utilitzat per una altra persona. La part d'implementació està oculta per l'usuari que utilitza la interfície.

Fitxer: 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(); }} 
Prova-ho ara

Sortida:

gimp eliminant el fons
 drawing circle 

Interfície Java Exemple: Banc

Vegem un altre exemple d'interfície java que proporciona la implementació de la interfície del banc.

Fitxer: 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()); }} 
Prova-ho ara

Sortida:

 ROI: 9.15 

Herència múltiple en Java per interfície

Si una classe implementa múltiples interfícies, o una interfície amplia múltiples interfícies, es coneix com a herència múltiple.

jpa vs hibernar
herència múltiple en 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(); } } 
Prova-ho ara
 Output:Hello Welcome 

P) L'herència múltiple no s'admet mitjançant classe a Java, però és possible mitjançant una interfície, per què?

Com hem explicat al capítol de l'herència, l'herència múltiple no s'admet en el cas de classe per ambigüitat. Tanmateix, s'admet en el cas d'una interfície perquè no hi ha ambigüitat. És perquè la seva implementació la proporciona la classe d'implementació. Per exemple:

 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(); } } 
Prova-ho ara

Sortida:

 Hello 

Com podeu veure a l'exemple anterior, la interfície Printable i Showable tenen els mateixos mètodes, però la seva implementació la proporciona la classe TestTnterface1, de manera que no hi ha ambigüitat.


Herència de la interfície

Una classe implementa una interfície, però una interfície amplia una altra interfície.

 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(); } } 
Prova-ho ara

Sortida:

 Hello Welcome 

Mètode predeterminat de Java 8 a la interfície

Des de Java 8, podem tenir el cos del mètode a la interfície. Però hem de fer que sigui el mètode predeterminat. Vegem un exemple:

Fitxer: 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(); }} 
Prova-ho ara

Sortida:

 drawing rectangle default method 

Mètode estàtic Java 8 a la interfície

Des de Java 8, podem tenir un mètode estàtic a la interfície. Vegem un exemple:

convertint cadena a int

Fitxer: 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)); }} 
Prova-ho ara

Sortida:

 drawing rectangle 27 

P) Què és el marcador o la interfície etiquetada?

Una interfície que no té cap membre es coneix com a interfície marcador o etiquetada, per exemple, Serialitzable , Clonable, Remot, etc. S'utilitzen per proporcionar informació essencial a la JVM perquè la JVM pugui realitzar alguna operació útil.

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

Interfície anidada en Java

Nota: una interfície pot tenir una altra interfície que es coneix com a interfície imbricada. Ho aprendrem amb detall a la classes imbricades capítol. Per exemple:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Més informació sobre la interfície anidada