⚔️ Java Metot Overriding ve Overloading: Farklar, Örnekler ve Polimorfizm Rehberi
Bu rehberde, Java'nın Nesne Yönelimli Programlama (OOP) temellerinden olan
Metot Ezme (Overriding) ve Metot Aşırı Yükleme (Overloading) konularını
örneklerle öğreneceksiniz.
Bu iki teknik, Java’da Polimorfizmin (Çok Biçimliliğin) en önemli temsilcileridir.
🧠 Teknik Özet
Ana konu: Java’da Overriding ve Overloading farkları
Amaç: Çalışma zamanı ve derleme zamanı polimorfizmini anlamak
Kapsam:
- Overriding: Üst sınıf metodunun alt sınıfta yeniden tanımlanması
- Overloading: Aynı sınıfta aynı metodun farklı parametrelerle çoğaltılması
- Farkların tablo ile görselleştirilmesi
- Gerçek kod örnekleriyle uygulama
☕ Temel Kavramlar
Metot Ezme (Overriding)
Üst sınıftan miras alınan bir metot, alt sınıfta aynı isim ve parametrelerle yeniden tanımlanır.
Amaç, üst sınıf davranışını özelleştirmektir.
Metot Aşırı Yükleme (Overloading)
Aynı sınıf içinde aynı metot ismiyle, ama farklı parametre listeleriyle birden fazla metot tanımlanır.
Amaç, aynı işlevin farklı türde verilerle çalışmasını sağlamaktır.
⚖️ Overriding ve Overloading Karşılaştırması
| Özellik | Overriding (Ezme) | Overloading (Aşırı Yükleme) |
|---|---|---|
| Polimorfizm Türü | Çalışma Zamanı (Runtime) | Derleme Zamanı (Compile Time) |
| Metot Belirleme Anı | Nesnenin türüne göre çalışma anında | Metot imzasına göre derleme aşamasında |
| Kapsam | Üst sınıf ↔ Alt sınıf | Aynı sınıf içinde |
| İmza (isim + parametre) | Aynı olmalı | Aynı isim, farklı parametreler |
| Hata Zamanı | Runtime | Compile Time |
| Static Metotlar | Ezilemez (override yapılamaz) | Aşırı yüklenebilir |
💻 Örnek Uygulama: Processor ve MathProcessor Sınıfları
Aşağıdaki örnekte hem Overloading hem de Overriding kullanılmıştır.
Processor.java
package com.rabisu.ornekler;
import java.util.Arrays;
public class Processor {
public void process(int i, int j) {
System.out.printf("İki tamsayı işleniyor: %d, %d%n", i, j);
}
public void process(int[] ints) {
System.out.println("Tamsayı dizisi işleniyor: " + Arrays.toString(ints));
}
public void process(Object[] objs) {
System.out.println("Nesne dizisi işleniyor: " + Arrays.toString(objs));
}
}
➡️ Burada aynı metot ismi process() farklı parametrelerle Overload edilmiştir.
MathProcessor.java
class MathProcessor extends Processor {
@Override
public void process(int i, int j) {
System.out.println("Tamsayıların toplamı: " + (i + j));
}
@Override
public void process(int[] ints) {
int sum = 0;
for (int i : ints) sum += i;
System.out.println("Dizi elemanlarının toplamı: " + sum);
}
}
➡️ Bu sınıf, üst sınıf Processor’daki metotları aynı imza ile yeniden tanımlayarak (override ederek) davranışlarını değiştirmiştir.
🔍 Farkların Kod Üzerinden Analizi Overloading Örneği:
public class Processor {
public void process(int i, int j) { /* ... */ }
public void process(int[] ints) { /* ... */ }
public void process(Object[] objs) { /* ... */ }
}
🟢 Aynı isimli ama farklı parametre listeli metotlar.
Overriding Örneği:
public class Processor {
public void process(int i, int j) { /* ... */ }
}
class MathProcessor extends Processor {
@Override
public void process(int i, int j) { /* ... */ }
}
🟢 Üst sınıftaki metot alt sınıfta yeniden tanımlanmıştır.
💬 Sıkça Sorulan Sorular (SSS)
- Overriding hangi polimorfizmi uygular?
Çalışma Zamanı Polimorfizmini (Runtime Polymorphism).
- Overloading’de dönüş tipi farklı olabilir mi?
Evet, ancak parametrelerin de farklı olması gerekir.
- @Override etiketi zorunlu mu?
Hayır ama tavsiye edilir. Derleyici, yanlış imza kullanımını engeller.
- static metotlar override edilebilir mi?
Hayır, static metotlar sınıfa aittir. Aynı imzayla tanımlanırsa bu “method hiding” olur.
- Hangi durumda hangisi kullanılmalı?
Aynı sınıfta farklı parametrelerle çalışmak istiyorsan Overloading, alt sınıfta davranışı değiştirmek istiyorsan Overriding kullan.
✅ Sonuç
Bu rehberde, Java'da Overriding (metot ezme) ve Overloading (metot aşırı yükleme) farklarını, örneklerle ve tablolarla öğrendiniz. Artık hangi durumda hangisini kullanmanız gerektiğini biliyorsunuz.
💡 Özet:
Overloading = Derleme Zamanı Polimorfizmi
Overriding = Çalışma Zamanı Polimorfizmi
☁️ Kendi Java uygulamanızda bu kavramları test etmek için Rabisu Bulut üzerinde hemen bir Sanal Sunucu (Instance) oluşturabilir, kodunuzu canlı olarak deneyebilirsiniz.