Java
default metot
interface içinde default metodu öğrenirsin.
default metot
Bir default metot, interface içinde gövdesi olan metottur. Uygulayan sınıf isterse onu yeniden yazabilir; yazmazsa interface'teki gövde kullanılır. default anahtar kelimesiyle başlar.
Örnek: interface Logger { default void info(String msg) { System.out.println(msg); } }. Burada info metodu gövdelidir. Uygulayan sınıf info yazmazsa bile bu gövde çalışır. Bu, mevcut interface'lere metot eklerken eski sınıfları bozmamak için kullanılır. Sözleşmeye yeni davranış eklemenin güvenli yoludur. Sınıf yine de isterse metodu override edebilir.
Interface'i bozmadan metot ekleme
Default metotlar, mevcut interface'lere yeni davranış eklemeyi sağlar. Uygulayan sınıfları değiştirmeden yeni metotlar ekleyebilirsin. Bu, geriye dönük uyumluluk için kritiktir.
Örnek: Logger interface'ine default void warn(String msg) eklersen, eski sınıflar bu metodu yazmasa bile çalışır. Yeni sınıflar isterse override eder. Default metot olmadan, interface'e metot eklemek tüm uygulayan sınıfları bozar. Java 8 ile gelen bu özellik, kütüphane geliştiricilerine büyük esneklik kazandırır. Eski kodu kırmadan interface'i büyütmenin resmi yoludur.
Uygulama Logger interface'ine default metot ekle
Logger adında bir interface tanımla. İçine default void info(String msg) metodu ekle; gövdesi System.out.println("Bilgi: " + msg); yazsın. Sonra class ConsoleLogger implements Logger yaz; info metodunu yazmadan boş gövde bırak. main içinde new ConsoleLogger().info("Kayıt başladı") çağır.
Örnek çözümü göster
interface Logger {
default void info(String msg) {
System.out.println("Bilgi: " + msg);
}
}
class ConsoleLogger implements Logger {
}
class Main {
public static void main(String[] args) {
new ConsoleLogger().info("Kayıt başladı");
}
}
Kendini test et
-
default metot uygulayan sınıfta yazılmazsa ne olur?
- Derleme hatası verir
- Metot silinir
- Interface'teki gövde çalışır
- Çalışma hatası verir
Cevabı göster
Interface'teki gövde çalışır — Interface'teki gövde kullanılır.
-
default anahtar kelimesini ekle
interface Logger {
____ void info(String msg) {
System.out.println(msg);
}
}
Cevabı göster
interface Logger {
default void info(String msg) {
System.out.println(msg);
}
}
-
default metot kavramlarını eşle
- default
- Gövdeli metot kelimesi
- info(String msg)
- Metot imzası
- override
- Yeniden yazma
- backward compatible
- Geriye dönük uyumlu
Sıradaki ders: static metot