Una interfaz en el lenguaje de programación Java se define como un tipo abstracto utilizado para especificar el comportamiento de una clase. Una interfaz en Java es un modelo de una clase. Una interfaz Java contiene constantes estáticas y métodos abstractos.
La interfaz en Java es un mecanismo para lograr la abstracción . Solo puede haber métodos abstractos en la interfaz de Java, no el cuerpo del método. Se utiliza para lograr abstracción y herencia múltiple en Java . En otras palabras, puede decir que las interfaces pueden tener métodos y variables abstractas. No puede tener un cuerpo de método. La interfaz Java también representa la relación IS-A .
Al igual que una clase, una interfaz puede tener métodos y variables, pero los métodos declarados en una interfaz son abstractos por defecto (solo firma de método, sin cuerpo).
- Las interfaces especifican qué debe hacer una clase y no cómo. Es el modelo de la clase.
- Una interfaz se trata de capacidades, como que un jugador puede ser una interfaz y cualquier clase que implemente el jugador debe poder (o debe implementar) mover(). Entonces especifica un conjunto de métodos que la clase tiene que implementar.
- Si una clase implementa una interfaz y no proporciona cuerpos de método para todas las funciones especificadas en la interfaz, entonces la clase debe declararse abstracta.
- Un ejemplo de biblioteca Java es Comparator Interface . Si una clase implementa esta interfaz, entonces se puede usar para ordenar una colección.
Sintaxis:
interface { // declare constant fields // declare methods that abstract // by default. }
Para declarar una interfaz, utilice la palabra clave de interfaz. Se utiliza para proporcionar abstracción total. Eso significa que todos los métodos en una interfaz se declaran con un cuerpo vacío y son públicos 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. Para implementar la interfaz, use la palabra clave implements.
¿Por qué usamos una interfaz?
- Se utiliza para lograr la abstracción total.
- Dado que Java no admite herencias múltiples en el caso de la clase, mediante el uso de una interfaz puede lograr herencias múltiples.
- También se utiliza para lograr un acoplamiento flojo.
- Las interfaces se utilizan para implementar la abstracción. Entonces surge la pregunta ¿por qué usar interfaces cuando tenemos clases abstractas?
La razón es que las clases abstractas pueden contener variables no finales, mientras que las variables en la interfaz son finales, públicas y estáticas.
// A simple interface interface Player { final int id = 10; int move(); }
Diferencia entre clase e interfaz
Las principales diferencias entre una clase y una interfaz son:
S. No. | Clase | Interfaz |
---|---|---|
1. | En clase, puede crear instancias de variables y crear un objeto. | En una interfaz, no puede instanciar variables y crear un objeto. |
2. | La clase puede contener métodos concretos (con implementación) | La interfaz no puede contener métodos concretos (con implementación) |
3. | Los especificadores de acceso utilizados con las clases son privados, protegidos y públicos. | En la interfaz solo se usa un especificador: público. |
Implementación: para implementar una interfaz usamos la palabra clave implements
Java
// Java program to demonstrate working of // interface import java.io.*; // A simple interface interface In1 { // public, static and final final int a = 10; // public and abstract void display(); } // A class that implements the interface. class TestClass implements In1 { // Implementing the capabilities of // interface. public void display(){ System.out.println("Geek"); } // Driver Code public static void main(String[] args) { TestClass t = new TestClass(); t.display(); System.out.println(a); } }
Geek 10
Ejemplo del mundo real: Consideremos el ejemplo de vehículos como bicicleta, automóvil, bicicleta………, tienen funcionalidades comunes. Así que hacemos una interfaz y ponemos todas estas funcionalidades comunes. Y permite que Bicycle, Bike, car…etc implementen todas estas funcionalidades en su propia clase a su manera.
Java
// Java program to demonstrate the // real-world example of Interfaces import java.io.*; interface Vehicle { // all are the abstract methods. void changeGear(int a); void speedUp(int a); void applyBrakes(int a); } class Bicycle implements Vehicle{ int speed; int gear; // to change gear @Override public void changeGear(int newGear){ gear = newGear; } // to increase speed @Override public void speedUp(int increment){ speed = speed + increment; } // to decrease speed @Override public void applyBrakes(int decrement){ speed = speed - decrement; } public void printStates() { System.out.println("speed: " + speed + " gear: " + gear); } } class Bike implements Vehicle { int speed; int gear; // to change gear @Override public void changeGear(int newGear){ gear = newGear; } // to increase speed @Override public void speedUp(int increment){ speed = speed + increment; } // to decrease speed @Override public void applyBrakes(int decrement){ speed = speed - decrement; } public void printStates() { System.out.println("speed: " + speed + " gear: " + gear); } } class GFG { public static void main (String[] args) { // creating an inatance of Bicycle // doing some operations Bicycle bicycle = new Bicycle(); bicycle.changeGear(2); bicycle.speedUp(3); bicycle.applyBrakes(1); System.out.println("Bicycle present state :"); bicycle.printStates(); // creating instance of the bike. Bike bike = new Bike(); bike.changeGear(1); bike.speedUp(4); bike.applyBrakes(3); System.out.println("Bike present state :"); bike.printStates(); } }
Bicycle present state : speed: 2 gear: 2 Bike present state : speed: 1 gear: 1
Ventajas de las interfaces en Java
Las ventajas de usar interfaces en Java son las siguientes:
- Sin preocuparnos por la parte de implementación, podemos lograr la seguridad de la implementación.
- En Java, la herencia múltiple no está permitida, sin embargo, puede usar una interfaz para hacer uso de ella, ya que puede implementar más de una interfaz.
Nuevas funciones agregadas en interfaces en JDK 8
1. Antes de JDK 8, la interfaz no podía definir la implementación. Ahora podemos agregar la implementación predeterminada para los métodos de interfaz. Esta implementación predeterminada tiene un uso especial y no afecta la intención detrás de las interfaces.
Supongamos que necesitamos agregar una nueva función en una interfaz existente. Obviamente, el código anterior no funcionará ya que las clases no han implementado esas nuevas funciones. Entonces, con la ayuda de la implementación predeterminada, daremos un cuerpo predeterminado para las funciones recién agregadas. Entonces los códigos antiguos seguirán funcionando.
Java
// Java program to show that interfaces can // have methods from JDK 1.8 onwards interface In1 { final int a = 10; default void display() { System.out.println("hello"); } } // A class that implements the interface. class TestClass implements In1 { // Driver Code public static void main (String[] args) { TestClass t = new TestClass(); t.display(); } }
hello
2. Otra característica que se agregó en JDK 8 es que ahora podemos definir métodos estáticos en interfaces que se pueden llamar de forma independiente sin un objeto. Nota: estos métodos no se heredan.
Java
// Java Program to show that interfaces can // have methods from JDK 1.8 onwards interface In1 { final int a = 10; static void display() { System.out.println("hello"); } } // A class that implements the interface. class TestClass implements In1 { // Driver Code public static void main (String[] args) { In1.display(); } }
hello
Puntos importantes sobre la interfaz o el resumen del artículo:
- No podemos crear una instancia (no se puede crear una instancia de la interfaz) de la interfaz, pero podemos hacer que la referencia se refiera al Objeto de su clase de implementación.
- Una clase puede implementar más de una interfaz.
- Una interfaz puede extenderse a otra interfaz o interfaz (más de una interfaz).
- Una clase que implementa la interfaz debe implementar todos los métodos en la interfaz.
- Todos los métodos son públicos y abstractos. Y todos los campos son públicos, estáticos y finales.
- Se utiliza para lograr herencias múltiples.
- Se utiliza para lograr un acoplamiento flojo.
Nuevas funciones agregadas en interfaces en JDK 9
Desde Java 9 en adelante, las interfaces también pueden contener lo siguiente:
- Métodos estáticos
- Métodos privados
- Métodos estáticos privados
Artículos relacionados:
- Especificador de acceso de métodos en interfaces
- Especificadores de acceso para clases o interfaces en Java
- Clases abstractas en Java
- Interfaz del comparador en Java
- Métodos de interfaz de Java
- Interfaz anidada en Java
Este artículo es una contribución de Mehak Kumar y Nitsdheerendra. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA