← CC2008

Interfaces

Semestre 02, 2026

Interfaces

Colección de métodos abstractos que las clases deben definir. Desde Java 8 también admite métodos default y static.


interface Figura {
    double area();
    double perimetro();

    default void mostrarInfo() {
        System.out.println("Soy una figura geométrica.");
    }
}

Implementar (implements)


class Circulo implements Figura {
    private double radio;

    public Circulo(double r) { this.radio = r; }

    public double area() {
        return Math.PI * radio * radio;
    }

    public double perimetro() {
        return 2 * Math.PI * radio;
    }
}

Características

  • No tienen atributos de instancia (solo constantes public static final).
  • Los métodos son implícitamente public y abstract.
  • Una clase puede implementar múltiples interfaces.

Herencia múltiple vía interfaces

Java no permite herencia múltiple de clases, pero sí de interfaces.


interface Volador { void volar(); }
interface Nadador { void nadar(); }

class Pato implements Volador, Nadador {
    public void volar() { System.out.println("El pato vuela bajo."); }
    public void nadar() { System.out.println("El pato nada en Pana."); }
}

Polimorfismo vía interfaces

Una interfaz define un contrato; cualquier clase que la implemente se usa de forma polimórfica.


Animal a1 = new Perro();
Animal a2 = new Gato();

a1.hacerSonido(); // Guau
a2.hacerSonido(); // Miau

Comparable

Permite comparar objetos del mismo tipo; clave para ordenar colecciones.


class Persona implements Comparable<Persona> {
    private int edad;

    @Override
    public int compareTo(Persona otra) {
        return Integer.compare(this.edad, otra.edad);
    }
}

Collections.sort(lista); // usa compareTo

Iterator

Recorre elementos de una colección sin exponer su estructura interna.


class Contador implements Iterator<Integer> {
    private int actual = 0;
    private final int max;

    public Contador(int max) { this.max = max; }

    @Override public boolean hasNext() { return actual < max; }
    @Override public Integer next() { return actual++; }
}

¿Cuándo usar una interfaz?

Cuando varias clases comparten un contrato de comportamiento.
Para combinar comportamientos de distintas fuentes.
Para escribir código genérico y extensible.
Para lograr polimorfismo sin herencia de clases.