Soyut Sınıflar hem soyut hem de somut yöntemler (uygulama ile) içerebilir ve durumları (veri alanları) da olabilir. Bir sınıf yalnızca bir soyut sınıftan miras alabilir. Soyut sınıflar, miras alanların mantığını ve durumunu genelleştirmek gerektiğinde kullanılır.
Arayüzler yalnızca yöntemlerin imzalarını tanımlar (Java 8'e kadar), Java 8'den itibaren varsayılan (default) uygulamalara sahip yöntemler ve statik yöntemler içerebilir, ancak durum içermezler. Bir sınıf birden fazla arayüzü uygulayabilir. Davranışların, miras hiyerarşisinden bağımsız bir şekilde tanımlanması için arayüzleri kullanın.
Örnek:
abstract class Animal { String name; public Animal(String name) { this.name = name; } abstract void makeSound(); } interface Movable { void move(); } class Dog extends Animal implements Movable { public Dog(String name) { super(name); } void makeSound() { System.out.println("Woof!"); } public void move() { System.out.println("Runs"); } }
Yalnızca soyut yöntemler içeren bir soyut sınıf ile Java 8'den önceki bir arayüz arasındaki fark nedir? Bunlar birbirinin yerine kullanılabilir mi?
Cevap: Hayır, her zaman değil. Arayüz, durum (örnek alanları) içeremez ve çoklu uygulamaları desteklerken, soyut sınıf mirası tekilliktir. Ayrıca, arayüz yöntemlerinin imzaları her zaman public'tir.
Hikaye
Projenin, benzer davranışlara sahip ancak farklı hiyerarşilere ait nesnelerin, arayüzlerin birkaçını uygulaması gerekiyordu. Geliştirici soyut sınıf kullanmayı seçti, bu da çoklu mirası kullanmayı imkansız hale getirdi. Bu daha sonra büyük bir yeniden refaktöringe ve kodun tekrarlanmasına yol açtı.
Hikaye
Büyük bir REST API projesinde, değişken değerler olacağını varsayarak alanları (sabitleri) olan bir arayüz oluşturuldu. Sonuç olarak bu alanları değiştirme girişimi, Silent Failure ile sonuçlandı — değerler eski kaldı, hata uzun süre bulunamadı.
Hikaye
Java 8'e geçiş sürecinde geliştiriciler, arayüze uygulamalarla birlikte yöntemler eklediler, ancak bazı sınıfların aynı isimli yöntemleri bir soyut sınıf yoluyla miras aldıklarını göz ardı ettiler. Bu, yöntemlerde çelişkilere ve miras çözümlemesi sırasında beklenmeyen sonuçlara yol açtı.