Java, geliştiricilerin karmaşık yazılım sistemleri oluşturmasına olanak tanıyan nesne yönelimli bir programlama dilidir. Java'nın en önemli özelliklerinden biri, sınıfların diğer sınıflardan özellik ve yöntemler devralmasına olanak tanıyan kalıtımdır. Java'da bir sınıf aynı anda yalnızca bir ebeveyn sınıfı genişletebilir, ancak arayüzleri kullanarak birden fazla kalıtım benzeri davranış elde etmek mümkündür. Bu yazıda Java'da birden fazla sınıfın nasıl genişletileceğini araştıracağız ve örnek programların çıktılarını sağlayacağız.
Java'da Birden Çok Sınıfı Genişletme
Java, bir sınıfın birden fazla sınıfı doğrudan genişletmesine izin vermez. Bunun nedeni, bir sınıfın ortak bir üst sınıfa sahip iki sınıftan miras alması durumunda ortaya çıkan Elmas Probleminden kaçınmaktır. Bu sorunu önlemek için Java, bir sınıfın benzer işlevlere ulaşabilen birden fazla arabirim uygulamasına izin verir.
Arayüz, bir sınıfın davranışını tanımlayan soyut yöntemler topluluğudur. Sınıfların aksine arayüzler somutlaştırılamaz ancak sınıflar tarafından uygulanabilir. Bir arayüz uygulayarak, bir sınıf birden fazla arayüzden özellikleri ve yöntemleri devralabilir. Bir sınıfın Elmas Problemi olmadan çoklu kalıtım benzeri davranışlar elde etmesine olanak tanır. Java'da birden fazla sınıfı genişletmek için ebeveyn sınıfların özelliklerini ve yöntemlerini içeren bir arayüz oluşturmamız gerekir. Uygulayıcı sınıf daha sonra arayüzü uygulayabilir ve üst sınıfların özelliklerini ve yöntemlerini miras alabilir. Bu kavramı daha iyi anlamak için bir örneğe bakalım.
yerel tarih java
Java'da Birden Çok Sınıfı Genişletme
Bu örnekte üç sınıf oluşturacağız: Hayvan, Memeli ve Sürüngen. Daha sonra Animal ve Mammal sınıflarını genişletecek Omnivore adında bir arayüz oluşturacağız. Son olarak Omnivore arayüzünü uygulayacak olan Platypus adında bir sınıf oluşturacağız.
Animal sınıfı, 'Hayvan yiyor' yazan, 'ye' adında bir yöntem içerecektir. Mammal sınıfı, Animal sınıfını genişletecek ve 'Memeli süt içiyor' yazan 'drinkMilk' adlı bir yöntem içerecektir. Sürüngen sınıfı aynı zamanda Animal sınıfını da genişletecek ve 'Sürüngen yumurtluyor' yazan 'layEggs' adlı bir yöntem içerecektir.
İşte Animal sınıfının kodu:
public class Animal { public void eat() { System.out.println('Animal is eating.'); } }
İşte Mammal sınıfının kodu:
public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } }
İşte Sürüngen sınıfının kodu:
public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } }
Şimdi Animal ve Mammal sınıflarını genişletecek Omnivore arayüzünü oluşturalım:
public interface Omnivore extends Animal, Mammal { public void eatPlants(); }
Son olarak Omnivore arayüzünü uygulayacak Platypus sınıfını oluşturalım:
Android'de uygulama nasıl gösterilir?
public class Platypus implements Omnivore { public void eat() { System.out.println('Platypus is eating.'); } public void drinkMilk() { System.out.println('Platypus is drinking milk.'); } public void eatPlants() { System.out.println('Platypus is eating plants.'); } }
Bu örnekte Platypus sınıfı, Animal ve Mammal sınıflarını genişleten Omnivore arayüzünü uyguluyor. Bu nedenle Platypus sınıfı hem Animal hem de Mammal sınıflarının özelliklerini ve yöntemlerini miras alıyor.
'prim'in algoritması'
Platypus sınıfının bir örneğini oluşturarak ve onun yöntemlerini çağırarak programımızı test edelim:
public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } }
Çıktı:
Platypus is eating. Platypus is drinking milk. Platypus is eating plants.
Gördüğümüz gibi Platypus sınıfı, Omnivore arayüzünü uygulayarak hem Animal hem de Mammal sınıflarının özelliklerini ve yöntemlerini miras alabilmektedir. Bu, Java'da çoklu kalıtım benzeri davranışlar elde etmemizi sağlar.
Java'da Çoklu Kalıtım Benzeri Davranış Ne Zaman Kullanılır?
Arayüzleri kullanarak Java'da çoklu kalıtım benzeri davranışlar elde etmek mümkün olsa da, bu her zaman gerekli veya arzu edilen bir durum değildir. Aslında birçok geliştirici, çoklu mirasın kodu daha karmaşık ve bakımı zor hale getirebileceğini savunuyor. Bu nedenle, programınız için çoklu kalıtım benzeri davranışın gerekli olup olmadığını dikkatlice düşünmek önemlidir.
Çoklu kalıtım benzeri davranışın yararlı olabileceği bir durum, birden fazla kaynaktan gelen işlevleri birleştirmeniz gerektiği durumdur. Örneğin, farklı türde işlevler sağlayan iki sınıfınız varsa, bunları her ikisinden de miras alan tek bir sınıfta birleştirmek isteyebilirsiniz. Bu durumda her iki sınıfı da genişleten bir arayüz uygulamak iyi bir çözüm olabilir. Çoklu kalıtım benzeri davranışın faydalı olabileceği başka bir durum, kalıtımı yoğun olarak kullanan üçüncü taraf kitaplıklarla çalışıyor olmanızdır. Birden fazla üçüncü taraf sınıfını genişletmeniz gerekiyorsa, arayüzleri uygulamak, karmaşık miras hiyerarşileri oluşturmadan bunu başarmanın iyi bir yolu olabilir.
Java'da birden fazla sınıfı doğrudan genişletmek mümkün değildir. Ancak birden fazla sınıfı genişleten arayüzler uygulayarak çoklu kalıtım benzeri davranışlar elde etmek mümkündür. Bu, doğrudan çoklu kalıtımla ortaya çıkabilecek Elmas Sorunu olmadan, bir sınıfın birden fazla ebeveyn sınıftan özellik ve yöntemleri devralmasına olanak tanır. Çoklu kalıtım benzeri davranışlar belirli durumlarda faydalı olabilse de programınız için gerekli olup olmadığını dikkatle değerlendirmeniz önemlidir. Çoğu durumda, arayüzleri ve kompozisyonu kullanmak, birden fazla kaynaktan gelen işlevselliği birleştirmek için daha iyi bir çözüm olabilir.