-
Sadrazamv4
ig:sadrazam_v4 tg: Sadrazam.spy
🚀 BAŞTAN SONA JAVA DİLİ BÖLÜM-9: Inheritance (Kalıtım / Miras) ve Method Overriding 🧬
Selamlar! Serimizin 9. bölümüne hoş geldiniz.
Önceki bölümde OOP’nin ilk temel sütunu olan Encapsulation (Kapsülleme) ilkesini, erişim belirteçlerini ve Getter/Setter mimarisini incelemiştik. Bu bölümde ise OOP’nin ikinci ana direği olan **Inheritance (Kalıtım / Miras Alma)** ilkesini, **`extends`** ve **`super`** anahtar kelimelerini ve **Method Overriding (Metot Ezme)** kavramını öğreneceğiz.
---
📌 1. Inheritance (Kalıtım / Miras) Nedir? 🎭
Kalıtım, var olan bir sınıfın (Superclass / Parent) özelliklerini ve metotlarını yeni oluşturulan bir sınıfa (Subclass / Child) aktarması işlemidir.
Neden Gereklidir?
✨ **Kodun Yeniden Kullanılabilirliği (Reusability):** Ortak kodları tekrar tekrar yazmak yerine üst sınıfta bir kez tanımlarız.
📐 **Hiyerarşik Düzen:** Gerçek dünyadaki nesne ilişkilerini (örneğin *Çalışan* -> *Mühendis*, *Yönetici*) kod ortamına aktarır.
Maintenance kolaylığı sağlar: Ortak bir davranış değiştiğinde sadece üst sınıfı güncellemek yeterlidir.
### Temel Terimler:
• **Superclass (Parent / Üst Sınıf):** Miras veren sınıftır.
• **Subclass (Child / Alt Sınıf):** Miras alan sınıftır. `extends` kelimesi ile üst sınıfa bağlanır.
> **Kritik Kural:** Java **Çoklu Kalıtımı (Multiple Inheritance)** desteklemez! Bir sınıf doğrudan yalnızca **TEK BİR** sınıftan `extends` edebilir.
---
🏗️ 2. `extends` İle Kalıtım Uygulaması ⚙️
Gelin bir şirket sistemindeki ortak çalışanları ve uzmanlıkları modelleyelim.
### Üst Sınıf (`Calisan.java`):
public class Calisan {
private String isim;
private double maas;
public Calisan(String isim, double maas) {
this.isim = isim;
this.maas = maas;
}
public void calis() {
System.out.println(isim + " çalışmaya başladı.");
}
// Getter ve Setter Metotları
public String getIsim() { return isim; }
public void setIsim(String isim) { this.isim = isim; }
public double getMaas() { return maas; }
public void setMaas(double maas) { this.maas = maas; }
}
### Alt Sınıf (`Yazilimci.java`):
// 'extends Calisan' diyerek Calisan sınıfının tüm public/protected alanlarını devralıyoruz
public class Yazilimci extends Calisan {
private String uzmanlikDili;
// Subclass Constructor
public Yazilimci(String isim, double maas, String uzmanlikDili) {
// super() ile üst sınıfın (Calisan) constructor'ı çağrılır
super(isim, maas);
this.uzmanlikDili = uzmanlikDili;
}
// Yazılımcıya özel yeni metot
public void kodYaz() {
System.out.println(getIsim() + ", " + uzmanlikDili + " dili ile kod yazıyor. 💻");
}
}
---
⚡ 3. `super` Anahtar Kelimesi Kullanımı 🔑
`super`, alt sınıf içinden üst sınıftaki üyelere (constructor, metot veya field) erişmek için kullanılan özel bir referanstır.
### Kullanım Biçimleri:
1. **`super(...)`**: Üst sınıfın constructor'ını çağırır. Alt sınıf constructor'ında **İLK SATIRDA** olmak zorundadır.
2. **`super.metotAdi()`**: Üst sınıftaki bir metodu doğrudan çalıştırmak için kullanılır.
---
🔄 4. Method Overriding (Metot Ezme / İptal Etme) 🛠️
Alt sınıf, üst sınıftan miras aldığı bir metot davranışını özelleştirmek veya değiştirmek isterse, o metodu aynı isim ve aynı parametrelerle kendi içinde **yeniden yazar**. Buna **Method Overriding** denir.
• **`@Override` Anotasyonu:** Derleyiciye bu metodun üst sınıftan ezildiğini bildirir. Yazım hatalarını önlemek için kullanılması en iyi pratiktir (Best Practice).
### Alt Sınıf Metot Ezme Örneği (`Yonetici.java`):
public class Yonetici extends Calisan {
private double prim;
public Yonetici(String isim, double maas, double prim) {
super(isim, maas);
this.prim = prim;
}
// Üst sınıftaki 'calis' metodunu kendi ihtiyacımıza göre eziyoruz (Overriding)
@Override
public void calis() {
System.out.println(getIsim() + " yönetici olarak ekibi koordine ediyor. 👔");
}
// Ekstra metot
public void primEkle() {
System.out.println(getIsim() + " yöneticisine " + prim + " TL prim eklendi.");
}
}
---
🧪 5. Kalıtım ve Overriding Kullanımı (`Main.java`) 🚀
public class Main {
public static void main(String[] args) {
// Yazılımcı nesnesi türetme
Yazilimci y = new Yazilimci("Ahmet", 85000.0, "Java");
y.calis(); // Calisan sınıfından devralınan varsayılan metot çalışır
y.kodYaz(); // Yazilimci sınıfına özel metot
System.out.println("-----------------------------------");
// Yönetici nesnesi türetme
Yonetici m = new Yonetici("Mehmet", 120000.0, 15000.0);
m.calis(); // Yonetici sınıfında ezilmiş (@Override) metot çalışır!
m.primEkle();
}
}
---
⚠️ 6. Method Overloading vs Method Overriding 🤼
| Özellik | Method Overloading (Aşırı Yükleme) | Method Overriding (Metot Ezme) |
| :--- | :--- | :--- |
| **Sınıf İlişkisi** | Aynı sınıf içerisinde gerçekleşir. | Üst sınıf ve Alt sınıf arasında gerçekleşir. |
| **Metot İsmi** | Aynıdır. | Aynıdır. |
| **Parametreler** | Farklı olmalıdır (Sayı veya Tip). | Birebir **AYNI** olmalıdır. |
| **Zamanlama** | Derleme zamanı (Compile-time Polymorphism). | Çalışma zamanı (Runtime Polymorphism). |
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde Inheritance (Kalıtım) mantığını, `extends` kullanımını, `super` keyword'ünün rolünü, `@Override` ile metot ezmeyi ve Overloading ile Overriding arasındaki farkları öğrendik.
👉 **Bölüm 10'da Bizi Ne Bekliyor?**
• OOP'nin Üçüncü Ana Temeli: **Polymorphism (Çok Biçimlilik)** 🎭
• Üst Sınıf Referansı İle Alt Sınıf Nesnesi Tutma (Upcasting)
• **`instanceof`** Operatörü ve
Downcasting
• Dinamik Metot Bağlama (Dynamic Method Binding)
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
Selamlar! Serimizin 9. bölümüne hoş geldiniz.
Önceki bölümde OOP’nin ilk temel sütunu olan Encapsulation (Kapsülleme) ilkesini, erişim belirteçlerini ve Getter/Setter mimarisini incelemiştik. Bu bölümde ise OOP’nin ikinci ana direği olan **Inheritance (Kalıtım / Miras Alma)** ilkesini, **`extends`** ve **`super`** anahtar kelimelerini ve **Method Overriding (Metot Ezme)** kavramını öğreneceğiz.
---
📌 1. Inheritance (Kalıtım / Miras) Nedir? 🎭
Kalıtım, var olan bir sınıfın (Superclass / Parent) özelliklerini ve metotlarını yeni oluşturulan bir sınıfa (Subclass / Child) aktarması işlemidir.
Neden Gereklidir?
✨ **Kodun Yeniden Kullanılabilirliği (Reusability):** Ortak kodları tekrar tekrar yazmak yerine üst sınıfta bir kez tanımlarız.
📐 **Hiyerarşik Düzen:** Gerçek dünyadaki nesne ilişkilerini (örneğin *Çalışan* -> *Mühendis*, *Yönetici*) kod ortamına aktarır.
Maintenance kolaylığı sağlar: Ortak bir davranış değiştiğinde sadece üst sınıfı güncellemek yeterlidir.
### Temel Terimler:
• **Superclass (Parent / Üst Sınıf):** Miras veren sınıftır.
• **Subclass (Child / Alt Sınıf):** Miras alan sınıftır. `extends` kelimesi ile üst sınıfa bağlanır.
> **Kritik Kural:** Java **Çoklu Kalıtımı (Multiple Inheritance)** desteklemez! Bir sınıf doğrudan yalnızca **TEK BİR** sınıftan `extends` edebilir.
---
🏗️ 2. `extends` İle Kalıtım Uygulaması ⚙️
Gelin bir şirket sistemindeki ortak çalışanları ve uzmanlıkları modelleyelim.
### Üst Sınıf (`Calisan.java`):
public class Calisan {
private String isim;
private double maas;
public Calisan(String isim, double maas) {
this.isim = isim;
this.maas = maas;
}
public void calis() {
System.out.println(isim + " çalışmaya başladı.");
}
// Getter ve Setter Metotları
public String getIsim() { return isim; }
public void setIsim(String isim) { this.isim = isim; }
public double getMaas() { return maas; }
public void setMaas(double maas) { this.maas = maas; }
}
### Alt Sınıf (`Yazilimci.java`):
// 'extends Calisan' diyerek Calisan sınıfının tüm public/protected alanlarını devralıyoruz
public class Yazilimci extends Calisan {
private String uzmanlikDili;
// Subclass Constructor
public Yazilimci(String isim, double maas, String uzmanlikDili) {
// super() ile üst sınıfın (Calisan) constructor'ı çağrılır
super(isim, maas);
this.uzmanlikDili = uzmanlikDili;
}
// Yazılımcıya özel yeni metot
public void kodYaz() {
System.out.println(getIsim() + ", " + uzmanlikDili + " dili ile kod yazıyor. 💻");
}
}
---
⚡ 3. `super` Anahtar Kelimesi Kullanımı 🔑
`super`, alt sınıf içinden üst sınıftaki üyelere (constructor, metot veya field) erişmek için kullanılan özel bir referanstır.
### Kullanım Biçimleri:
1. **`super(...)`**: Üst sınıfın constructor'ını çağırır. Alt sınıf constructor'ında **İLK SATIRDA** olmak zorundadır.
2. **`super.metotAdi()`**: Üst sınıftaki bir metodu doğrudan çalıştırmak için kullanılır.
---
🔄 4. Method Overriding (Metot Ezme / İptal Etme) 🛠️
Alt sınıf, üst sınıftan miras aldığı bir metot davranışını özelleştirmek veya değiştirmek isterse, o metodu aynı isim ve aynı parametrelerle kendi içinde **yeniden yazar**. Buna **Method Overriding** denir.
• **`@Override` Anotasyonu:** Derleyiciye bu metodun üst sınıftan ezildiğini bildirir. Yazım hatalarını önlemek için kullanılması en iyi pratiktir (Best Practice).
### Alt Sınıf Metot Ezme Örneği (`Yonetici.java`):
public class Yonetici extends Calisan {
private double prim;
public Yonetici(String isim, double maas, double prim) {
super(isim, maas);
this.prim = prim;
}
// Üst sınıftaki 'calis' metodunu kendi ihtiyacımıza göre eziyoruz (Overriding)
@Override
public void calis() {
System.out.println(getIsim() + " yönetici olarak ekibi koordine ediyor. 👔");
}
// Ekstra metot
public void primEkle() {
System.out.println(getIsim() + " yöneticisine " + prim + " TL prim eklendi.");
}
}
---
🧪 5. Kalıtım ve Overriding Kullanımı (`Main.java`) 🚀
public class Main {
public static void main(String[] args) {
// Yazılımcı nesnesi türetme
Yazilimci y = new Yazilimci("Ahmet", 85000.0, "Java");
y.calis(); // Calisan sınıfından devralınan varsayılan metot çalışır
y.kodYaz(); // Yazilimci sınıfına özel metot
System.out.println("-----------------------------------");
// Yönetici nesnesi türetme
Yonetici m = new Yonetici("Mehmet", 120000.0, 15000.0);
m.calis(); // Yonetici sınıfında ezilmiş (@Override) metot çalışır!
m.primEkle();
}
}
---
⚠️ 6. Method Overloading vs Method Overriding 🤼
| Özellik | Method Overloading (Aşırı Yükleme) | Method Overriding (Metot Ezme) |
| :--- | :--- | :--- |
| **Sınıf İlişkisi** | Aynı sınıf içerisinde gerçekleşir. | Üst sınıf ve Alt sınıf arasında gerçekleşir. |
| **Metot İsmi** | Aynıdır. | Aynıdır. |
| **Parametreler** | Farklı olmalıdır (Sayı veya Tip). | Birebir **AYNI** olmalıdır. |
| **Zamanlama** | Derleme zamanı (Compile-time Polymorphism). | Çalışma zamanı (Runtime Polymorphism). |
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde Inheritance (Kalıtım) mantığını, `extends` kullanımını, `super` keyword'ünün rolünü, `@Override` ile metot ezmeyi ve Overloading ile Overriding arasındaki farkları öğrendik.
👉 **Bölüm 10'da Bizi Ne Bekliyor?**
• OOP'nin Üçüncü Ana Temeli: **Polymorphism (Çok Biçimlilik)** 🎭
• Üst Sınıf Referansı İle Alt Sınıf Nesnesi Tutma (Upcasting)
• **`instanceof`** Operatörü ve
Downcasting
• Dinamik Metot Bağlama (Dynamic Method Binding)
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
🔒 Bu içeriği görmek için giriş yapın