Varsayılan interface metotları
Metot implementasyonlarını doğrudan interface'lere ekleyin ve çoklu davranış kalıtımını etkinleştirin.
// 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 { ... }
Çoklu kalıtım
Sınıflar, tek soyut sınıf kalıtımının aksine, varsayılan metotlara sahip birçok interface'i uygulayabilir.
API evrimi
Mevcut implementasyonları bozmadan interface'lere yeni metotlar ekleyin.
Birleştirilebilir davranış
Birden fazla interface'den yetenekleri özgürce karıştırın ve eşleştirin.
JDK 8'den itibaren kullanılabilir (Mart 2014).
Java 8'den önce, ilgisiz sınıflar arasında davranış paylaşmak soyut sınıflar gerektiriyordu ve bu da sizi tek kalıtımla sınırlıyordu. Varsayılan metotlar, interface'lerin metot implementasyonları sağlamasına izin verir, böylece sınıflar birden fazla interface'den davranış kalıtımı alabilir. Bu, mevcut implementasyonları bozmadan Koleksiyonlar API'sini (örn. List.forEach, Map.getOrDefault) geliştirmek için gerekliydi.