İçeriğe geç

Inheritance (Kalıtım)

Inheritance (Kalıtım), bir sınıfın başka bir sınıfın özelliklerini (alanlarını ve metotlarını) miras almasıdır.
Kod tekrarını azaltır ve yeniden kullanılabilirliği artırır.

💡 “Bir sınıf, başka bir sınıftan türetilir.”


class AltSinif extends UstSinif {
// Yeni özellikler veya metotlar eklenebilir
}

🔸 extends anahtar kelimesi kullanılır.


class Hayvan {
void sesCikar() {
System.out.println("Bir hayvan ses çıkarıyor...");
}
}
class Kedi extends Hayvan {
void miyavla() {
System.out.println("Miyav!");
}
}
public class Main {
public static void main(String[] args) {
Kedi k = new Kedi();
k.sesCikar(); // Üst sınıf metodu
k.miyavla(); // Alt sınıf metodu
}
}

Kedi sınıfı, Hayvan sınıfındaki sesCikar() metodunu miras almıştır.


super anahtar kelimesi, üst sınıfa erişmek için kullanılır.

class Hayvan {
String tur = "Genel Hayvan";
void sesCikar() {
System.out.println("Hayvan sesi...");
}
}
class Kopek extends Hayvan {
String tur = "Köpek";
void yazdir() {
System.out.println(super.tur); // Üst sınıf değişkeni
super.sesCikar(); // Üst sınıf metodu
}
}

🔹 5. Constructor (Yapıcı) Kalıtımı

Section titled “🔹 5. Constructor (Yapıcı) Kalıtımı”

Alt sınıfın yapıcısı (constructor), çalışırken otomatik olarak üst sınıfın yapıcısını çağırır.

class Hayvan {
Hayvan() {
System.out.println("Hayvan oluşturuldu.");
}
}
class Kedi extends Hayvan {
Kedi() {
System.out.println("Kedi oluşturuldu.");
}
}
public class Main {
public static void main(String[] args) {
new Kedi();
}
}

Çıktı:
Hayvan oluşturuldu.
Kedi oluşturuldu.


Alt sınıf, üst sınıfta bulunan bir metodu kendi ihtiyacına göre değiştirebilir.

class Hayvan {
void sesCikar() {
System.out.println("Genel bir hayvan sesi...");
}
}
class Kedi extends Hayvan {
@Override
void sesCikar() {
System.out.println("Miyav!");
}
}

💡 @Override etiketi, bir metodu üst sınıftan ezdiğimizi belirtir.


Alt sınıflar, üst sınıftaki protected üyeleri doğrudan kullanabilir.

class Arac {
protected int hiz = 120;
}
class Araba extends Arac {
void yazdir() {
System.out.println("Hız: " + hiz);
}
}

🔹 8. Çok Seviyeli Kalıtım (Multilevel Inheritance)

Section titled “🔹 8. Çok Seviyeli Kalıtım (Multilevel Inheritance)”
class Canli {
void yasiyor() { System.out.println("Canlı yaşıyor."); }
}
class Hayvan extends Canli {
void hareketEt() { System.out.println("Hayvan hareket ediyor."); }
}
class Kedi extends Hayvan {
void miyavla() { System.out.println("Miyav!"); }
}
public class Main {
public static void main(String[] args) {
Kedi k = new Kedi();
k.yasiyor();
k.hareketEt();
k.miyavla();
}
}

Bir sınıf veya metot final olarak işaretlenirse kalıtım veya ezme yapılamaz.

final class Arac {} // başka sınıf extend edemez
class Araba {
final void calistir() {
System.out.println("Araba çalışıyor.");
}
}

💡 final → kalıtımı engeller.


Üst sınıf referansı, alt sınıf nesnesini gösterebilir (upcasting).

Hayvan h = new Kedi();
h.sesCikar(); // Kedi’nin ezilmiş metodu çağrılır

💡 Polymorphism (çok biçimlilik) bu davranışın temelini oluşturur.


class Calisan {
void bilgi() { System.out.println("Ben bir çalışanım."); }
}
class Muhendis extends Calisan {
void projeYap() { System.out.println("Proje geliştiriyorum."); }
}
class Yazilimci extends Muhendis {
void kodYaz() { System.out.println("Java kodu yazıyorum."); }
}
public class Main {
public static void main(String[] args) {
Yazilimci y = new Yazilimci();
y.bilgi();
y.projeYap();
y.kodYaz();
}
}

✅ Kod tekrarını azaltır
✅ Ortak özellikleri üst sınıfta toplar
✅ Polimorfizm’i (çok biçimliliği) destekler
✅ Kodun bakımını kolaylaştırır


KavramAçıklamaAnahtar Kelime
InheritanceBir sınıfın başka sınıftan miras almasıextends
superÜst sınıfa erişimsuper.metot()
@OverrideMetot ezme işlemi@Override
finalKalıtımı engellerfinal class
MultilevelBirden fazla seviye kalıtımA -> B -> C

💡 Not: Java çoklu kalıtımı (birden fazla sınıfı extend etmeyi) desteklemez. Bunun yerine interface yapısı kullanılır.