Language Orta

Varsayılan interface metotları

Metot implementasyonlarını doğrudan interface'lere ekleyin ve çoklu davranış kalıtımını etkinleştirin.

✕ Java 7
// 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 { ... }
✓ Java 8+
public interface Logger {
    default void log(String msg) {
        IO.println(
            timestamp() + ": " + msg);
    }
    String timestamp();
}

// Multiple interfaces allowed
public class FileLogger
    implements Logger, Closeable { ... }
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🔀

Ç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.

Eski Yaklaşım
Paylaşılan davranış için soyut sınıflar
Modern Yaklaşım
Interface'lerde varsayılan metotlar
JDK'dan itibaren
8
Zorluk
Orta
Varsayılan interface metotları
Mevcut

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.

Paylaş 𝕏 🦋 in