logo

Interfaz en Java

  1. Interfaz
  2. Ejemplo de interfaz
  3. Herencia múltiple por interfaz
  4. Por qué se admite la herencia múltiple en la interfaz mientras que no se admite en el caso de la clase.
  5. Interfaz de marcador
  6. Interfaz anidada

Un interfaz en java es un modelo de una clase. Tiene constantes estáticas y métodos abstractos.

transformar cadena a int

La interfaz en Java es un mecanismo para lograr abstracción . Sólo puede haber métodos abstractos en la interfaz Java, no el cuerpo del método. Se utiliza para lograr abstracción y múltiples herencia en java .

En otras palabras, se puede decir que las interfaces pueden tener métodos y variables abstractos. No puede tener un cuerpo de método.

Interfaz Java también representa la relación IS-A .

No se puede crear una instancia como la clase abstracta.

Desde Java 8, podemos tener métodos predeterminados y estáticos en una interfaz.

Desde Java 9, podemos tener métodos privados en una interfaz.

la cadena está vacía

¿Por qué utilizar la interfaz Java?

Existen principalmente tres razones para utilizar la interfaz. Se dan a continuación.

  • Se utiliza para lograr la abstracción.
  • A través de la interfaz, podemos admitir la funcionalidad de herencia múltiple.
  • Se puede utilizar para lograr un acoplamiento flojo.
¿Por qué utilizar la interfaz Java?

¿Cómo declarar una interfaz?

Una interfaz se declara utilizando la palabra clave interfaz. Proporciona abstracción total; significa que todos los métodos en una interfaz se declaran con el cuerpo vacío y todos los campos son públicos, estáticos y finales de forma predeterminada. Una clase que implementa una interfaz debe implementar todos los métodos declarados en la interfaz.

Sintaxis:

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

Mejora de la interfaz de Java 8

Desde Java 8 , la interfaz puede tener métodos predeterminados y estáticos, que se analizan más adelante.

Adición interna por parte del compilador.

El compilador de Java agrega palabras clave públicas y abstractas antes del método de interfaz. Además, agrega palabras clave públicas, estáticas y finales antes de los miembros de datos.

En otras palabras, los campos de la interfaz son públicos, estáticos y finales de forma predeterminada, y los métodos son públicos y abstractos.

interfaz en java

La relación entre clases e interfaces.

Como se muestra en la figura siguiente, una clase extiende otra clase, una interfaz extiende otra interfaz, pero una clase implementa una interfaz .

La relación entre clase e interfaz.

Ejemplo de interfaz Java

En este ejemplo, la interfaz Imprimible tiene solo un método y su implementación se proporciona en la clase 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(); } } 
Pruébalo ahora

Producción:

expresión regular java para
 Hello 

Ejemplo de interfaz Java: dibujable

En este ejemplo, la interfaz Drawable tiene solo un método. Su implementación la proporcionan las clases Rectángulo y Círculo. En un escenario real, otra persona define una interfaz, pero su implementación la proporcionan diferentes proveedores de implementación. Además, lo utiliza otra persona. La parte de implementación está oculta por el usuario que utiliza la interfaz.

Archivo: 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(); }} 
Pruébalo ahora

Producción:

 drawing circle 

Ejemplo de interfaz Java: banco

Veamos otro ejemplo de interfaz Java que proporciona la implementación de la interfaz bancaria.

Archivo: TestInterface2.java

lista de religiones
 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()); }} 
Pruébalo ahora

Producción:

 ROI: 9.15 

Herencia múltiple en Java por interfaz

Si una clase implementa múltiples interfaces, o una interfaz extiende múltiples interfaces, se conoce como herencia múltiple.

herencia 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(); } } 
Pruébalo ahora
 Output:Hello Welcome 

P) La herencia múltiple no se admite mediante clases en Java, pero es posible mediante una interfaz, ¿por qué?

Como hemos explicado en el capítulo sobre herencia, la herencia múltiple no se admite en el caso de clase debido a la ambigüedad. Sin embargo, se admite en el caso de una interfaz porque no hay ambigüedad. Esto se debe a que su implementación la proporciona la clase de implementación. Por ejemplo:

 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(); } } 
Pruébalo ahora

Producción:

 Hello 

Como puede ver en el ejemplo anterior, las interfaces Printable y Showable tienen los mismos métodos, pero su implementación la proporciona la clase TestTnterface1, por lo que no hay ambigüedad.


Herencia de interfaz

Una clase implementa una interfaz, pero una interfaz extiende otra interfaz.

 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(); } } 
Pruébalo ahora

Producción:

 Hello Welcome 

Método predeterminado de Java 8 en la interfaz

Desde Java 8, podemos tener el cuerpo del método en la interfaz. Pero debemos convertirlo en el método predeterminado. Veamos un ejemplo:

Archivo: 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(); }} 
Pruébalo ahora

Producción:

comparación de cadenas
 drawing rectangle default method 

Método estático de Java 8 en la interfaz

Desde Java 8, podemos tener un método estático en la interfaz. Veamos un ejemplo:

Archivo: 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)); }} 
Pruébalo ahora

Producción:

 drawing rectangle 27 

P) ¿Qué es un marcador o una interfaz etiquetada?

Una interfaz que no tiene ningún miembro se conoce como marcador o interfaz etiquetada, por ejemplo, Serializable , Clonable, Remoto, etc. Se utilizan para proporcionar información esencial a la JVM para que la JVM pueda realizar alguna operación útil.

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

Interfaz anidada en Java

Nota: Una interfaz puede tener otra interfaz que se conoce como interfaz anidada. Lo aprenderemos en detalle en el clases anidadas capítulo. Por ejemplo:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Más sobre la interfaz anidada