Java’da Polymorphism (Çok Biçimlilik) – Polymorphism Nedir ?

3374
views

Bir önceki yazımızda encapsulation konusuna değinmiştik. Bu yazımızda ise polymorphism konusunu işleyeceğiz.

Polymorphism OOP için gerçekten önemli bir kavram. Polymorphism işlerimizi çoğu zaman kolaylaştırıyor. Genel kavram olarak bir nesnenin birden fazla nesle gibi davranma şeklidir.

Detaylarını örnekle anlamaya çalışalım;

Bu derse kadar yapmış olduğumuz örneklerde classları hep farklı bir yerde oluşturmuştuk. Bu kez main classımızın olduğu yerde tanımlayacağız. Başına public anahtar kelimesini eklemeden yazmamız mümkün. Eğer public class yazacaksak bu sefer ismiyle aynı olmak zorunda olacaktı.

class Hayvan şeklinde diğer classımızı yarattık ve isim özelliğini ekledik. Constructor ve getter setter metotlarımızı oluşturduk. Son olarak konus() adında bir metot yazdık.

Şimdi Hayvan classından miras alan 3 tane class yazalım.

Kedi classı

Kedi classımız Hayvan classımızdan miras alacağı için extends yaptık. Constructorımızıda oluşturduk. Ek olarak konus() metodumuzu override ettik. Bunun için yine kısayol kullandık.

Sağ tıklayıp “Insert Code” diyoruz. Ardından

Override method“a tıklıyoruz.

konus() metodumuza tıklayıp “Generate” diyoruz.

Ancak biz Hayvan classındaki metodu değilde kendi metodumuzu yazmak istiyoruz. Bu yüzden aşağıdaki gibi düzenliyoruz.

Şimdi Köpek classımızı yazalım

Constructorımızı oluşturduk. konus() metodunu override ettik.

At sınıfımızı oluşturuyoruz.

Yine aynı şekilde constructorımızı oluşturduk ve metot override yaptık.

Şimdi artık polymorphismi görebiliriz.

Normalde main classı içerisinde bu zamana kadar objeyi hep aşağıdaki gibi tanımlamıştık.

Fakat şimdi hiç görmediğimiz bir tanımla şeklini göreceğiz. Aşağıdaki gibi tanımladığımızda javanın hata vermediğini görüyoruz.

İşte polymorphism bu aslında. Bir tane referans birden farklı obje gibi davranıyor. Yani bizim hayvan referansımız var ancak biz buna Kedi referansı atadık.

Polymorphism yapmak için şu şartların olması gerekir.

1-) Ana classınız olacak. Bizim bu örnekteki ana classımız Hayvan classıydı.

2-) Geri kalan classlar alt sınıf olacak yani Hayvan classından miras alacaklar.

Biz bir objeyi birden fazla obje gibi kullanabiliyoruz. Ama bunun için mutlaka inheritance şeklinde bir yapınızın olması gerekiyor.

Kedi , Kopek ve At classlarından hayvan , hayvan1 ve hayvan2 referansları oluşturduk.

Mantık olarak şu şekilde işliyor.

hayvan1 e biz kopeği atıyoruz. Ve yukarıdan başlıyor. konus() metodum var mı diye bakıyor. Bana Kopek referansı atanmıştı. Kopeğin içinde bakıyor konus() metodu var mı? Varsa onu yoksa kendi metodunu çağırıyor.

Şimdi polymorphism in en önemli faydasına geldik.

Bizim bir tane fonksiyonumuz var ve bu fonksiyona 3 tane nesneyi göndermek istiyoruz. Ancak bunlar farklı nesneler. Kedi , Kopek ve At farklı classların nesneleri. Eğer polymorphism yaparsanız bunları aynı fonksiyona herhangi bir tür dönüşümü yapmadan direk olarak gönderebiliyorsunuz.

Örnekle anlamaya çalışalım

main classı içerisine konustur() şeklinde yeni bir fonksiyon yazıyoruz. Ve bu fonksiyonumuz Hayvan tipinden bir referans alacak.

Çalışma mantığı yukarıda bahsettiğimiz mantıkla aynı aslında.  new Kedi dediğimizde Kedi referansı konustur() metodundaki hayvan referansına eşitleniyor. Ve hayvan.konus() dediğimiz zaman “Mikedi miyavlıyor” şeklinde ekrana yazdıracak.

Eğer biz new Kopek dersek , kopek referansımız hayvan referansımıza eşitleniyor. Bu seferde hayvan Kopek gibi davranıyor ve ekrana “Richi havlıyor” şeklinde yazdıracak.

Burada herhangi bir tür dönüşümü yapmadan direk tek fonksiyonda bunu kullanmış olduk. Siz farklı bir classta ekleseniz bile konustur() fonksiyonunu değiştirmenize gerek kalmayacak.

Bir sonraki yazımızda polymorphism konusuna devam edeceğiz. Sonraki derse geçmek için tıklayınız.

 

2 YORUMLAR

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz