Polymorphism (Çok Biçimlilik): Overriding ve Overloading Farkları

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16
Polymorphism: Tek İsim, Çok Yetenek



1. Method Overloading (Aşırı Yükleme)​


Aynı sınıfta, aynı isme sahip fakat farklı parametrelere (sayı, tip veya sıra) sahip metotlar tanımlamaktır. Bu "Statik" veya "Compile-time" polymorphism olarak bilinir; çünkü hangi metodun çalışacağına derleme aşamasında karar verilir.

Java:
class Hesaplayici {
// İki sayıyı topla
int topla(int a, int b) { return a + b; }

// Üç sayıyı topla (Overloaded)
int topla(int a, int b, int c) { return a + b + c; }

// Ondalıklı sayıları topla (Overloaded)
double topla(double a, double b) { return a + b; }

}

2. Method Overriding (Ezme/Geçersiz Kılma)​


Bir alt sınıfın (Subclass), üst sınıftan (Superclass) miras aldığı bir metodu kendi ihtiyaçlarına göre yeniden yazmasıdır. Bu "Dinamik" veya "Runtime" polymorphism olarak bilinir; çünkü hangi metodun çalışacağı program çalışırken (nesnenin tipine göre) belirlenir.

Java:
class Hayvan {
void sesCikar() { System.out.println("Hayvan ses çıkarıyor..."); }
}

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

class Kopek extends Hayvan {
@Override
void sesCikar() { System.out.println("Hav Hav!"); }
}

3. Overloading ve Overriding: Kritik Farklar​


ÖzellikOverloading (Aşırı Yükleme)Overriding (Ezme)
Nerede Olur?Aynı sınıf içerisinde.Alt sınıf ve Üst sınıf arasında.
ParametrelerMutlaka farklı olmalı.Birebir aynı olmalı.
Bağlanma ZamanıDerleme zamanı (Compile-time).Çalışma zamanı (Runtime).
Ana AmaçOkunabilirliği artırmak.Miras alınan davranışı özelleştirmek.

4. Neden Önemli? (Gerçek Hayat Örneği)​


Diyelim ki bir "Ödeme" sisteminiz var. Üst sınıfınız Odeme ve metodu odemeYap(). Alt sınıflarınız ise KrediKarti ve Bitcoin.
Polymorphism sayesinde, sistem hangi ödeme yöntemi gelirse gelsin sadece odemeYap() metodunu çağırır. Java, çalışma anında o nesne kredi kartı ise karttan çekim yapar, Bitcoin ise cüzdan transferini tetikler. Kodunuz yeni ödeme yöntemlerine karşı esnek kalır!



Sonuç

Overloading, bir metodun farklı versiyonlarını sunarak hayatımızı kolaylaştırır. Overriding ise alt sınıfların kendi karakterlerini ortaya koymasını sağlar. Bu ikisi birleştiğinde Java'nın o meşhur esnek ve modüler yapısı ortaya çıkar.
 
Geri
Üst