Kalıtım (Inheritance), bir sınıfın başka bir sınıfın özelliklerini ve metotlarını devralmasını sağlayan nesne yönelimli programlama prensibidir. Java'da kalıtım sayesinde ortak özellikleri tek bir sınıfta tanımlayabilir ve bu özellikleri diğer sınıflarda yeniden kullanabiliriz. Böylece kod tekrarını azaltabilir ve daha düzenli bir yapı oluşturabiliriz.
Java'da kalıtım oluşturmak için extends anahtar kelimesi kullanılır. Örneğin, bir Hayvan sınıfımız ve bu sınıftan türeyen Kopek sınıfımız olsun.
|
class Hayvan {
String isim;
public void sesCikar() {
System.out.println("Hayvan ses çıkarıyor.");
}
}
class Kopek extends Hayvan {
public void havla() {
System.out.println("Köpek havlıyor!");
}
} |
- Hayvan: Üst sınıftır (superclass).
- Kopek: Alt sınıftır (subclass).
- extends Hayvan: Kopek sınıfının Hayvan sınıfından türediğini belirtir.
- isim ve sesCikar(): Kopek nesneleri tarafından da kullanılabilir.
- havla(): Yalnızca Kopek sınıfında tanımlanmış bir metottur.
public class Main {
public static void main(String[] args) {
Kopek kopek = new Kopek();
kopek.isim = "Kopek";
System.out.println(kopek.isim);
kopek.sesCikar();
kopek.havla();
}
}Kopek
Hayvan ses çıkarıyor.
Köpek havlıyor!
Gördüğün gibi Kopek sınıfında isim veya sesCikar() metotlarını yeniden yazmadık. Bunları Hayvan sınıfından devraldık
super, alt sınıftan üst sınıfın erişilebilir üyelerine ulaşmak için kullanılır. Üst sınıfın kurucusunu çağırmak için de kullanılabilir.
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan ses çıkarıyor.");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
super.sesCikar();
System.out.println("Miyav!");
}
}Burada super.sesCikar() üst sınıftaki metodu çağırır. @Overrideise alt sınıfta üst sınıftan gelen metodun yeniden tanımlandığını belirtir.
- Kod tekrarını azaltır: Ortak özellikler üst sınıfta tutulabilir.
- Kodun yeniden kullanılmasını sağlar: Alt sınıflar üst sınıfın erişilebilir üyelerini kullanabilir.
- Genişletilebilirlik sağlar: Alt sınıflara yeni özellikler eklenebilir.
- Polimorfizmi destekler: Üst sınıf referansları üzerinden alt sınıf nesneleri kullanılabilir.
- Bir sınıf, extends ile yalnızca bir sınıftan doğrudan kalıtım alabilir.
- Bir sınıf birden fazla arayüzü (interface) implements ile uygulayabilir.
- private üyeler alt sınıfta doğrudan erişilebilir değildir.
- final olarak tanımlanan bir sınıftan kalıtım alınamaz.
- Kurucular (constructors) kalıtılmaz; alt sınıf kurucuları üst sınıf kurucularını çağırabilir.
Kalıtımı şu şekilde düşünebilirsin:
GitHub dokümantasyonunda sıradaki konu: Soyutlama (Abstraction). Kalıtım ile soyutlamayı öğrendikten sonra çok biçimlilik (Polymorphism) konusunu ele alabilirsin.
