Interfaces en Java

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);
    }
}
Producción

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();
    }
}
Producción

Bicycle present state :
speed: 2 gear: 2
Bike present state :
speed: 1 gear: 1

Ventajas de las interfaces en Java

Java-Foundation-Course

Las ventajas de usar interfaces en Java son las siguientes:

  1. Sin preocuparnos por la parte de implementación, podemos lograr la seguridad de la implementación.
  2. 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();
    }
}
Producción

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();
    }
}
Producción

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:

  1. Métodos estáticos
  2. Métodos privados
  3. Métodos estáticos privados

Artículos relacionados:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *