Java’da Polymorphism (çok biçimlilik), nesnelerin farklı formlarda davranabilmesi yeteneğidir. Basitçe söylemek gerekirse, aynı isimdeki bir metot farklı nesneler tarafından farklı şekillerde çalıştırılabilir. Bu özellik, kodun esnekliğini, okunabilirliğini ve bakımını kolaylaştırır.
Bu yazıda polymorphism nedir, nasıl çalışır, Java’da hangi türleri vardır, örneklerle ve detaylı açıklamalarla anlatacağız.
🔍 Polymorphism Nedir?
Polymorphism, “çok biçimlilik” anlamına gelir. Bir işlemin, nesnenin türüne göre farklı şekillerde davranmasıdır.
Örneğin, bir Hayvan
sınıfının sesCikar()
metodu olsun. Bu metot, Kedi
nesnesinde “miyav” sesi çıkarırken, Kopek
nesnesinde “hav” sesi çıkarabilir.
📌 Polymorphism’in Türleri
- Compile-time Polymorphism (Derleme Zamanı Çok Biçimlilik)
- Metot Overloading (Aşırı Yükleme) ile sağlanır.
- Aynı isimde, farklı parametrelerle metotlar tanımlanır.
- Runtime Polymorphism (Çalışma Zamanı Çok Biçimlilik)
- Metot Overriding (Ezme) ile sağlanır.
- Alt sınıf, üst sınıftaki metodu kendine göre yeniden tanımlar.
- Dinamik bağlama (dynamic binding) kullanılır.
Compile-time Polymorphism – Metot Overloading
public class Hesaplama {
public int topla(int a, int b) {
return a + b;
}
public int topla(int a, int b, int c) {
return a + b + c;
}
}
Runtime Polymorphism – Metot Overriding ve Upcasting
1. Overriding Örneği
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan ses çıkarıyor");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Miyav");
}
}
class Kopek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Hav Hav");
}
}
2. Upcasting ve Polymorphism
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan ses çıkarıyor");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Miyav");
}
}
class Kopek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Hav Hav");
}
}
instanceof
Operatörü
Polymorphism ile bir nesnenin gerçek türünü kontrol etmek için kullanılır
if (hayvan instanceof Kedi) {
System.out.println("Bu nesne Kedi tipindedir.");
}
Polymorphism’in Avantajları
Avantaj | Açıklama |
---|---|
Esneklik | Kodlar farklı nesneler için uyarlanabilir |
Bakım Kolaylığı | Yeni sınıflar eklemek kolaydır |
Kod Tekrarını Azaltma | Ortak arayüzlerle ortak işlemler yapılabilir |
Genişletilebilirlik | Program yapısı daha modüler olur |
Dikkat Edilmesi Gerekenler
- Polymorphism ancak kalıtım ile mümkündür.
final
vestatic
metodlar override edilemez, dolayısıyla polymorphism çalışmaz.- Dinamik bağlama çalışma zamanında gerçekleşir.