Introducción

En Java, una interfaz es una referencia tipo que es similar a una clase, pero solo puede contener métodos abstractos, métodos predeterminados, métodos estáticos y constantes. Las interfaces no pueden contener implementaciones de métodos (excepto métodos predeterminados y estáticos). Las interfaces son una forma de lograr la abstracción y la herencia múltiple en Java.

Conceptos Clave

  1. Definición de una Interfaz: Una interfaz se define utilizando la palabra clave interface.
  2. Métodos Abstractos: Métodos que no tienen cuerpo y deben ser implementados por las clases que implementan la interfaz.
  3. Implementación de una Interfaz: Una clase implementa una interfaz utilizando la palabra clave implements.
  4. Herencia Múltiple: Una clase puede implementar múltiples interfaces, lo que permite una forma de herencia múltiple.
  5. Métodos Predeterminados y Estáticos: Desde Java 8, las interfaces pueden contener métodos predeterminados y estáticos con implementación.

Definición de una Interfaz

public interface Animal {
    void eat();
    void sleep();
}

En este ejemplo, Animal es una interfaz con dos métodos abstractos: eat y sleep.

Implementación de una Interfaz

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }

    @Override
    public void sleep() {
        System.out.println("Dog is sleeping");
    }
}

Aquí, la clase Dog implementa la interfaz Animal y proporciona las implementaciones de los métodos eat y sleep.

Métodos Predeterminados y Estáticos

Desde Java 8, las interfaces pueden tener métodos predeterminados y estáticos.

Método Predeterminado

public interface Animal {
    void eat();
    void sleep();

    default void run() {
        System.out.println("Animal is running");
    }
}

Método Estático

public interface Animal {
    void eat();
    void sleep();

    static void breathe() {
        System.out.println("Animal is breathing");
    }
}

Ejemplo Completo

public interface Animal {
    void eat();
    void sleep();

    default void run() {
        System.out.println("Animal is running");
    }

    static void breathe() {
        System.out.println("Animal is breathing");
    }
}

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }

    @Override
    public void sleep() {
        System.out.println("Dog is sleeping");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
        dog.run();
        Animal.breathe();
    }
}

Explicación del Código

  1. Definición de la Interfaz Animal: Contiene dos métodos abstractos (eat y sleep), un método predeterminado (run) y un método estático (breathe).
  2. Implementación de la Interfaz en la Clase Dog: La clase Dog implementa los métodos eat y sleep.
  3. Uso de Métodos Predeterminados y Estáticos: En el método main, se crea una instancia de Dog y se llaman los métodos eat, sleep, run y breathe.

Ejercicios Prácticos

Ejercicio 1

Descripción: Define una interfaz Vehicle con métodos start y stop. Implementa esta interfaz en una clase Car.

Solución:

public interface Vehicle {
    void start();
    void stop();
}

public class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car is starting");
    }

    @Override
    public void stop() {
        System.out.println("Car is stopping");
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.start();
        car.stop();
    }
}

Ejercicio 2

Descripción: Añade un método predeterminado honk a la interfaz Vehicle que imprima "Vehicle is honking". Llama a este método desde la clase Car.

Solución:

public interface Vehicle {
    void start();
    void stop();

    default void honk() {
        System.out.println("Vehicle is honking");
    }
}

public class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car is starting");
    }

    @Override
    public void stop() {
        System.out.println("Car is stopping");
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.start();
        car.stop();
        car.honk();
    }
}

Resumen

En esta sección, hemos aprendido sobre las interfaces en Java, cómo definirlas y cómo implementarlas en clases. También hemos explorado los métodos predeterminados y estáticos introducidos en Java 8. Las interfaces son una herramienta poderosa para lograr la abstracción y la herencia múltiple en Java. Asegúrate de practicar los ejercicios para reforzar tu comprensión de estos conceptos.

Curso de Programación en Java

Módulo 1: Introducción a Java

Módulo 2: Flujo de Control

Módulo 3: Programación Orientada a Objetos

Módulo 4: Programación Orientada a Objetos Avanzada

Módulo 5: Estructuras de Datos y Colecciones

Módulo 6: Manejo de Excepciones

Módulo 7: Entrada/Salida de Archivos

Módulo 8: Multihilo y Concurrencia

Módulo 9: Redes

Módulo 10: Temas Avanzados

Módulo 11: Frameworks y Librerías de Java

Módulo 12: Construcción de Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados