Métodos default em interfaces
Adicione implementações de métodos diretamente em interfaces, permitindo herança múltipla de comportamento.
// 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 { ... }
Herança múltipla
Classes podem implementar várias interfaces com métodos default, diferente da herança simples de classes abstratas.
Evolução de APIs
Adicione novos métodos a interfaces sem quebrar implementações existentes.
Comportamento combinável
Combine e misture capacidades de múltiplas interfaces livremente.
Disponível desde o JDK 8 (março de 2014).
Antes do Java 8, compartilhar comportamento entre classes não relacionadas exigia classes abstratas, o que limitava à herança simples. Métodos default permitem que interfaces forneçam implementações de métodos, para que classes herdem comportamento de múltiplas interfaces. Isso foi essencial para evoluir a API de Collections (ex. List.forEach, Map.getOrDefault) sem quebrar implementações existentes.