Métodos predeterminados en Java 8

Antes de Java 8, las interfaces solo podían tener métodos abstractos. La implementación de estos métodos debe proporcionarse en una clase separada. Entonces, si se va a agregar un nuevo método en una interfaz, entonces su código de implementación debe proporcionarse en la clase que implementa la misma interfaz. Para superar este problema, Java 8 ha introducido el concepto de métodos predeterminados que permiten que las interfaces tengan métodos con implementación sin afectar las clases que implementan la interfaz.

// A simple program to Test Interface default
// methods in java
interface TestInterface
{
    // abstract method
    public void square(int a);
  
    // default method
    default void show()
    {
      System.out.println("Default Method Executed");
    }
}
  
class TestClass implements TestInterface
{
    // implementation of square abstract method
    public void square(int a)
    {
        System.out.println(a*a);
    }
  
    public static void main(String args[])
    {
        TestClass d = new TestClass();
        d.square(4);
  
        // default method executed
        d.show();
    }
}

Producción:

 16
 Default Method Executed

Los métodos predeterminados se introdujeron para proporcionar compatibilidad con versiones anteriores, de modo que las interfaces existentes puedan usar las expresiones lambda sin implementar los métodos en la clase de implementación. Los métodos predeterminados también se conocen como métodos defensores o métodos de extensión virtual .

Métodos estáticos:
las interfaces también pueden tener métodos estáticos, que es similar al método estático de clases.

// A simple Java program to TestClassnstrate static
// methods in java
interface TestInterface
{
    // abstract method
    public void square (int a);
  
    // static method
    static void show()
    {
        System.out.println("Static Method Executed");
    }
}
  
class TestClass implements TestInterface
{
    // Implementation of square abstract method
    public void square (int a)
    {
        System.out.println(a*a);
    }
  
    public static void main(String args[])
    {
        TestClass d = new TestClass();
        d.square(4);
  
        // Static method executed
        TestInterface.show();
    }
}

Producción:

 16
 Static Method Executed

Métodos predeterminados y herencia múltiple
En caso de que ambas interfaces implementadas contengan métodos predeterminados con la misma firma de método, la clase de implementación debe especificar explícitamente qué método predeterminado se utilizará o debe anular el método predeterminado.

// A simple Java program to demonstrate multiple
// inheritance through default methods.
interface TestInterface1
{
    // default method
    default void show()
    {
        System.out.println("Default TestInterface1");
    }
}
  
interface TestInterface2
{
    // Default method
    default void show()
    {
        System.out.println("Default TestInterface2");
    }
}
  
// Implementation class code
class TestClass implements TestInterface1, TestInterface2
{
    // Overriding default show method
    public void show()
    {
        // use super keyword to call the show
        // method of TestInterface1 interface
        TestInterface1.super.show();
  
        // use super keyword to call the show
        // method of TestInterface2 interface
        TestInterface2.super.show();
    }
  
    public static void main(String args[])
    {
        TestClass d = new TestClass();
        d.show();
    }
}

Producción:

Default TestInterface1
Default TestInterface2

Puntos importantes:

  1. Las interfaces pueden tener métodos predeterminados con implementación en Java 8 en adelante.
  2. Las interfaces también pueden tener métodos estáticos, similares a los métodos estáticos en las clases.
  3. Los métodos predeterminados se introdujeron para proporcionar compatibilidad con versiones anteriores de las interfaces antiguas para que puedan tener nuevos métodos sin afectar el código existente.

Este artículo es una contribución de Akash Ojha . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

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 *