Java’da Polymorphism (Çok Biçimlilik)

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

  1. 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.
  2. 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ı

AvantajAçıklama
EsneklikKodlar farklı nesneler için uyarlanabilir
Bakım KolaylığıYeni sınıflar eklemek kolaydır
Kod Tekrarını AzaltmaOrtak arayüzlerle ortak işlemler yapılabilir
GenişletilebilirlikProgram yapısı daha modüler olur

Dikkat Edilmesi Gerekenler

  • Polymorphism ancak kalıtım ile mümkündür.
  • final ve static metodlar override edilemez, dolayısıyla polymorphism çalışmaz.
  • Dinamik bağlama çalışma zamanında gerçekleşir.
guest
0 Yorum
Eskiler
En Yeniler Beğenilenler
Inline Feedbacks
View all comments
0
YORUM YAPx