Tekli ve Çok Seviyeli Kalıtım
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 25 / 87.
Şu ana kadar, sınıfların doğrudan bir ana sınıfı genişlettiğini gördük. Ancak kalıtım, sınıfların birbirleriyle nasıl ilişkilendiğine bağlı olarak farklı yapılar oluşturabilir. İki ana deseni inceleyelim: tekli kalıtım ve çok seviyeli kalıtım.
Tekli kalıtım, şimdiye kadar kullandığımız yöntemdir. Bir sınıf, doğrudan tam olarak bir üst sınıfı genişletir:
public class Animal { }
public class Dog extends Animal { }
public class Cat extends Animal { }Burada, hem Dog hem de Cat, Animal sınıfından miras alır, ancak birbirlerinden miras almazlar. Her alt sınıfın bir doğrudan üst sınıfı vardır.
Çok seviyeli kalıtım, bir sınıfın başka bir sınıfı genişlettiği ve o sınıfın da başka bir sınıfı genişlettiği bir zincir oluşturur:
public class Animal {
public void eat() {
System.out.println("Eating");
}
}
public class Mammal extends Animal {
public void breathe() {
System.out.println("Breathing");
}
}
public class Dog extends Mammal {
public void bark() {
System.out.println("Barking");
}
}Bu zincirde, Dog sınıfı Mammal sınıfından, o da Animal sınıfından miras alır. Bir Dog nesnesi, tüm zincirdeki tüm metotlara erişebilir:
Dog dog = new Dog();
dog.eat(); // Animal'dan
dog.breathe(); // Mammal'dan
dog.bark(); // Dog'danObject'in her zincirin en üstünde yer aldığını unutma. Dolayısıyla Dog sınıfımızın aslında dört seviyesi vardır: Object -> Animal -> Mammal -> Dog. Yeni bir nesne oluşturulurken yapıcı zincirlemesi tüm bu seviyeler boyunca ilerler.
Görev
KolayHem tekli hem de çok seviyeli kalıtım desenlerini gösteren bir ulaşım hiyerarşisi oluşturalım. Her seviyenin yeni yetenekler eklediği bir sınıf zinciri oluşturacak ve metotların birden fazla seviye boyunca nasıl miras alındığını göstereceksin.
Kodunu dört dosya arasında düzenleyeceksin:
Vehicle.java: Hiyerarşinin en üstünde temel sınıfı oluştur. Her aracın şunlara sahip olması gerekir:brand(String) için bir private alan- brand değerini kabul eden bir constructor
- brand değerini döndüren bir
getBrand()metodu - Şunu yazdıran bir
move()metodu:[brand] is moving
LandVehicle.java: Çok seviyeli zincirinin orta seviyesini temsil eden ve Vehicle sınıfını genişleten bir sınıf oluştur. Kara araçları, karaya özgü davranışlar ekler:wheels(int) için bir private alan- brand ve wheels değerlerini alan, üst sınıfa ait kısım için
super(brand)kullanan bir constructor - Tekerlek sayısını döndüren bir
getWheels()metodu - Şunu yazdıran bir
honk()metodu:[brand] honks!
Car.java: Üç seviyeli kalıtım zincirini tamamlayarak LandVehicle sınıfını genişleten bir sınıf oluştur. Arabalar kendi özel özelliklerini ekler:model(String) için bir private alan- brand, wheels ve model değerlerini alan,
super(brand, wheels)kullanan bir constructor - model değerini döndüren bir
getModel()metodu - Şunu yazdıran bir
displayInfo()metodu:[brand] [model] with [wheels] wheels
Main.java: Bir Car nesnesinin hiyerarşinin üç seviyesindeki metotlara nasıl erişebildiğini göster. Üç girdi alacaksın: brand (String), wheels (int) ve model (String). Bir Car oluştur ve bu metotları sırayla çağır:move()- Vehicle sınıfından (büyükanne/büyükbaba sınıfı) miras alınırhonk()- LandVehicle sınıfından (üst sınıf) miras alınırdisplayInfo()- doğrudan Car sınıfında tanımlanır
Üç girdi alacaksın: brand adı, tekerlek sayısı ve model adı.
Çıktın, Car nesnesinin kalıtım zincirinin her seviyesindeki metotları nasıl kullanabildiğini gösteren üç satır içermelidir — en üst seviyedeki Vehicle sınıfından kendi sınıfına kadar!
GEREKLİ ÇIKTI BİÇİMİ:Kendin dene
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
String brand = scanner.nextLine();
int wheels = scanner.nextInt();
scanner.nextLine(); // yeni satırı tüket
String model = scanner.nextLine();
// TODO: Giriş değerleri ile bir Car nesnesi oluşturun
// TODO: move() metodunu çağırın - Vehicle sınıfından (büyük ebeveyn) miras alındı
// TODO: honk() metodunu çağırın - LandVehicle sınıfından (ebeveyn) miras alındı
// TODO: displayInfo() metodunu çağırın - Car sınıfının kendisinde tanımlandı
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi