Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Java - Polymorphism



  December 30, 2018    Labels:,,,,,,, 

Polymorphism çok şekillilik demektir. Bu konu kalıtım konusu ile iç içe geçmiş bir konudur. Kalıtım yolu ile oluşturduğumuz sınıfların birbiri yerine kullanılabilmesini sağlar. Örneğin Canli adında bir sınıfımızın olduğunu düşünelim. Daha sonra Bitki, Hayvan ve Insan adındaki sınıflarımızı Canli sınıfından extends ettiğimizi kabul edelim. Polymorphism sayesinde Canli sınıfından bir nesne referansı ile bitki, hayvan ve insan sınıfından oluşturduğumuz nesneleri gösterebiliriz. Bu ne işimize yarayacak derseniz, örneğin bizim bitki, hayvan ve insan için aynı işi yapmasını istediğimiz bir metot olsun. Normal şartlarda bu iş için 3 ayrı metot yazıp kod tekrarı yapmamız gerekecekti ancak polymorphism sayesinde tek bir metot yazıp bu 3 ayrı nesne için sadece canli sınıfından bir nesne alabiliriz. Daha sonra bu metoda insan, hayvan veya bitki sınıfından bir nesne gönderildiğinde hangi nesne gönderilmiş olursa olsun o nesne gibi davranış sergileyecektir.
Üst sınıf nesnesinin bir alt sınıf nesnesini göstermesine upcasting nedir. Bunun tam tersi de mümkündür. Yani insan sınıfından bir nesne canli sınıfından bir nesneyi gösterebilir. Bu işleme de downcasting denir. Ancak bu işlemde dikkat edilmesi gereken yer bu işlemi gerçekleştirirken alt sınıfın tipinin belirtilmesi gerektiğidir.

class Canli {

    public void sesCikar() {

        System.out.println("ses çıkarma");
    }

}

class Insan extends Canli {
    
    @Override
    public void sesCikar() {

        System.out.println("konuşma");
    }
}

class Hayvan extends Canli {

    @Override
    public void sesCikar() {

        System.out.println("bağırma");
    }
}

public class Example {

    public static void main(String[] args) {

        Insan insan1 = new Insan();
        Hayvan hayvan1 = new Hayvan();
        Canli canli2 = new Canli();

        // Upcasting
        Canli canli1 = insan1;
        canli1.sesCikar();
        // Downcasting
        Insan insan2 = (Insan) canli1;
        insan2.sesCikar();

        // Polymorphism
        polymorphism(canli1);
        polymorphism(insan2);
        polymorphism(hayvan1);
        polymorphism(canli2);

    }

    public static void polymorphism(Canli c) {
        
        c.sesCikar();
    }
}

1 comment: