Java 8'de, arabirimler uygulanmış yöntemler, statik yöntemler ve "varsayılan" yöntemler (uygulama sınıflarının geçersiz kılması gerekmeyen) içerebilir.
Benim (muhtemelen saf) görüşüme göre, bu gibi arayüzleri ihlal etmeye gerek yoktu. Arayüzler her zaman yapmanız gereken bir sözleşme olmuştur ve bu çok basit ve saf bir konsepttir. Şimdi birkaç şeyin karışımı. Bence:
- statik yöntemler arayüzlere ait değildir. Onlar faydalı sınıflara aittir.
- “varsayılan” yöntemlere hiçbir zaman arayüzlerde izin verilmemeliydi. Bu amaç için her zaman soyut bir sınıf kullanabilirsiniz.
Kısacası:
Java 8'den Önce:
- Statik ve varsayılan yöntemler sağlamak için soyut ve normal sınıfları kullanabilirsiniz. Arayüzlerin rolü açıktır.
- Arayüzdeki tüm yöntemler sınıfları uygulayarak geçersiz kılınmalıdır.
- Tüm uygulamaları değiştirmeden bir arayüze yeni bir yöntem ekleyemezsiniz, ancak bu aslında iyi bir şey.
Java 8'den sonra:
- Bir arabirim ile soyut bir sınıf arasında (çoklu kalıtım dışında) hemen hemen hiçbir fark yoktur. Aslında normal bir sınıfı bir arayüzle taklit edebilirsiniz.
- Uygulamaları programlarken, programcılar varsayılan yöntemleri geçersiz kılmayı unutabilirler.
- Bir sınıf aynı imzayla varsayılan bir yönteme sahip iki veya daha fazla arabirim uygulamaya çalışırsa, derleme hatası oluşur.
- Bir arabirime varsayılan bir yöntem ekleyerek, her uygulayıcı sınıf bu davranışı otomatik olarak devralır. Bu sınıfların bazıları akılda bu yeni işlevsellik ile tasarlanmamış olabilir ve bu sorunlara neden olabilir. Örneğin, birisi
default void foo()
bir arayüze yeni bir varsayılan yöntem eklerse , aynı imzayla özel bir yöntem uygulayan ve uygulayanIx
sınıf derlenmez.Cx
Ix
foo
Bu gibi büyük değişikliklerin temel nedenleri nelerdir ve (varsa) hangi yeni yararları ekler?
@Deprecated
kategoriye ait! Statik yöntemler, Java'da cehalet ve tembellik nedeniyle en çok suistimal edilen yapılardan biridir. Birçok statik yöntem genellikle yetersiz programlayıcı anlamına gelir, eşleşmeyi birkaç büyüklük sırasına göre artırır ve neden kötü bir fikir olduklarını fark ettiğinizde ünite testi ve refaktöre kabus olur!