Métodos default en interfaces
Añade implementaciones de métodos directamente en interfaces, habilitando herencia múltiple de comportamiento.
// Need abstract class to share behavior
public abstract class AbstractLogger {
public void log(String msg) {
System.out.println(
timestamp() + ": " + msg);
}
abstract String timestamp();
}
// Single inheritance only
public class FileLogger
extends AbstractLogger { ... }
public interface Logger {
default void log(String msg) {
IO.println(
timestamp() + ": " + msg);
}
String timestamp();
}
// Multiple interfaces allowed
public class FileLogger
implements Logger, Closeable { ... }
Herencia múltiple
Las clases pueden implementar varias interfaces con métodos default, a diferencia de la herencia simple con clases abstractas.
Evolución de APIs
Añade nuevos métodos a interfaces sin romper las implementaciones existentes.
Comportamiento composable
Combina capacidades de múltiples interfaces libremente.
Disponible desde JDK 8 (marzo 2014).
Antes de Java 8, compartir comportamiento entre clases no relacionadas requería clases abstractas, lo que limitaba a herencia simple. Los métodos default permiten que las interfaces proporcionen implementaciones, de modo que las clases pueden heredar comportamiento de múltiples interfaces. Esto fue esencial para evolucionar la API de Collections (p.ej., List.forEach, Map.getOrDefault) sin romper las implementaciones existentes.