Temel Kalıtım (extends)
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 20 / 87.
Kalıtım, OOP'nin temel sütunlarından biridir. Bir sınıfın başka bir sınıfın özelliklerini ve metotlarını edinmesini sağlayarak kodun yeniden kullanılabilirliğini teşvik eder ve sınıflar arasında doğal bir hiyerarşi kurar.
Java'da, extends anahtar kelimesini kullanarak bir kalıtım ilişkisi oluşturursunuz. Miras alan sınıfa subclass (veya alt sınıf), miras alınan sınıfa ise superclass (veya üst sınıf) denir.
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating");
}
public String getName() {
return name;
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name); // Üst sınıf kurucusunu çağırır
}
public void bark() {
System.out.println(getName() + " says woof!");
}
}Dog sınıfı, eat() metodunu ve getName() metodunu Animal sınıfından otomatik olarak miras alır. Ayrıca bark() gibi kendi metodlarını da tanımlayabilir:
Dog myDog = new Dog("Buddy");
myDog.eat(); // Miras alındı: "Buddy is eating"
myDog.bark(); // Kendi metodu: "Buddy says woof!"Kalıtımı bir "is-a" (bir ...-dır) ilişkisi olarak düşünün. Bir Dog bir Animal olduğundan, Dog'un Animal'ı genişletmesi (extend) mantıklıdır. Bu ilişki, ortak işlevselliği paylaşırken kendi benzersiz davranışlarını ekleyen özelleşmiş sınıflar oluşturmanıza olanak tanır.
Görev
KolayKalıtımı (inheritance) iş başında gösteren basit bir araç sistemi oluşturalım. Ortak araç özelliklerini barındıran bir üst sınıf (parent class) ve onu özel davranışlarla genişleten bir alt sınıf (child class) oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
Vehicle.java: Herhangi bir aracı temsil eden üst sınıfı oluşturun. Şunlara sahip olmalıdır:- Aracın
brand(String) bilgisi için özel (private) bir alan - Marka adını kabul eden bir kurucu (constructor); Vehicle üst sınıf olduğu için burada
super()kullanımına gerek yoktur - Markayı döndüren bir
getBrand()metodu - Şunu yazdıran bir
start()metodu:[brand] is starting
- Aracın
Motorcycle.java: Vehicle sınıfını genişleten (extends) bir alt sınıf oluşturun. Bir motosiklet bir araçtır, bu nedenle bu "is-a" ilişkisi kalıtımı uygun kılar. Motorcycle sınıfınız şunları yapmalıdır:- Vehicle sınıfından miras almak için
extendskullanın - Markayı alan ve
super(brand)kullanarak üst sınıfa ileten bir kurucuya sahip olun - Şunu yazdıran kendi
wheelie()metodunu ekleyin:[brand] is doing a wheelie!
- Vehicle sınıfından miras almak için
Main.java: Bir Motorcycle nesnesi oluşturarak ve hem miras alınan hem de benzersiz davranışları göstererek her şeyi bir araya getirin. Bir girdi alacaksınız: marka adı. Şunları çağırarak iki satır yazdırın:- Miras alınan
start()metodu - Motorcycle'ın kendi
wheelie()metodu
- Miras alınan
Motosikletiniz için bir girdi alacaksınız: marka adı (String).
Motorcycle sınıfınızın start() ve getBrand() metodlarına, onları tekrar yazmadan nasıl otomatik olarak erişebildiğine dikkat edin - işte kalıtımın gücü budur!
Kopya kağıdı
Sınıflar arasında bir kalıtım ilişkisi oluşturmak için extends anahtar kelimesini kullanın:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating");
}
public String getName() {
return name;
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name); // Üst sınıf kurucusunu çağırır
}
public void bark() {
System.out.println(getName() + " says woof!");
}
}Alt sınıf (child), üst sınıftaki (parent) tüm metotları devralır ve kendi metotlarını ekleyebilir:
Dog myDog = new Dog("Buddy");
myDog.eat(); // Devralınan metot
myDog.bark(); // Kendi metoduÜst sınıf kurucusunu çağırmak için alt sınıf kurucusunda super() kullanın.
Kalıtım, sınıflar arasında bir "is-a" ilişkisini temsil eder.
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String brand = scanner.nextLine();
// TODO: brand ile bir Motorcycle nesnesi oluşturun
// TODO: Kalıtım alınan start() metodunu çağırın
// TODO: wheelie() metodunu çağırın
}
}
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ı