Anotasyon

Java Polymorphism

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java Nesne Yönelimli Programlama başlığı altında Java Polymorphism konusuyla devam ediyoruz.

Polymorphism bir varlığın veya bir nesnenin birden fazla forma sahip olmasıdır denilebilir. Java Polymorphism yaptığım bu genel tanıma çok yakın özelliklere sahiptir. Java Polymorphism konusunu 4 başlık altında ele alabiliriz.

Java Polymorphism

1. Coercion

Java’nın sahip olduğu bir özellik olan Implicit Type Conversion (Örtük Türde Dönüştürme) polymorphism in alt başlıklarından Coercion yapısını anlatmada en iyi yöntem olabilir. Veri tiplerinin birbirine dönüştürülmesi konusunu ele alıp temel tiplerden bir örnek oluşturalım. Örnek Java kodumuzda bir int değişken oluşturalım bir de float değişken oluşturalım. Oluşturduğumuz bu değişkenlere değer atayalım. Ardından int olarak tanımladığımız değişkeni float olarak tanımladığımız değişkene bölelim. Burada derleyici hata ile karşılaşılmasını önlemek için integer tipte tanımlanan değişkeni float tipinde bir değişkene çevirerek işlemi yapar. Aşağıdaki kod ile ne anlatmaya çalıştığımı daha iyi anlayabilirsiniz.

Yukarıdaki kodda konsola yazdırılan sonuç “0.8” olacaktır. int tipindeki intDeger işlem sırasında derleyici tarafından float tipine dönüştürülerek işlem yapılmıştır. 

Temel tipteki bu yapıyı örnek alarak kendi sınıflarımızla bir örnek oluşturabiliriz. Vereceğim örneği açıklayacak en güzel cümle şu olacaktır. “Derleyici işlemleri yaparken, subclass türünü superclass türüne dönüştürür ve yapılabilecek işlemleri superclass’ ın özellikleriyle sınırlandırır.”

Yukarıdaki örnek kod bloğu çalıştırıldığında sadece Person sınıfına ait bilgilerin yazdırıldığı Employee sınıfına ait jobTitle ve salary özelliklerinin yazdırılmadığı görülecektir.

2. Overloading

Java Polymorphism yapısında işimizi kolaylaştıran bir diğer yapıda Overloading’ dir. Java’da oluşturulan sınıf içerisinde aynı isme sahip birden fazla metodun olabilme özelliğidir. Burada dikkat edilmesi gereken özellik, aynı isme sahip metotların parametre sayıları veya parametre tiplerinde farklılıklar olmalıdır. Şöyle ki;

Bu şekilde overload özelliğinden faydalanarak bir çok metot yazılabilir ve istediğimiz metodu istediğimiz şekilde özelleştirebiliriz. Böylelikle yaptığımız aynı işlem için farklı isimde metodlar oluşturmak yerine aynı isimde farklı parametrelerle aynı işlemi yapan metotlar elde etmiş oluruz.

3. Parametric

Parametric Polymorphism Java’da diğer bir adıyla Generic olarak bilinmektedir. Bu konu başlığı altında çok detayına inmeden basitçe anlatarak bir örnek vermeye çalışacağım. Java’da bir alan String bir değer alarak yine String bir değer dönerken, yine aynı şekilde integer bir değer alarak yine integer bir değer dönebilir. Basitçe bir örnek üzerinden anlatmak gerekirse;

4. Subtype

Java Polymorphism ile ilgili araştırma yaptığınızda bir çok yerde rastlayacağınız genel Polymorphism tanımı aslında subtype yapısının tanımıdır. Java’da subclass’lar (altsınıflar) superclass’ların onlara miras bıraktıkları değişkenleri ve metotları değiştirebilirler. Aynı zamanda değiştirmek istemedikleri metotları aynı şekilde kullanmaya devam edebilirler.

Aşağıdaki örnek Employee sınıfı Inheritance konusunda verilen Employee sınıfıyla birbir aynıdır.

Employee sınıfını miras alacak yeni sınıfta kullanılacak jobTitle değişkenlerinin hepsinin başında Senior olsun. Konu göz önünde bulundurularak geliştirme yapıldığında aşağıdaki gibi bir sınıf ortaya çıkacaktır.

Bu değişiklikten sonra PolymorphismEmployee sınıfından alınacak her jobTitle değişkeninin başında Senior javacaktır. Bu şekilde çalışma anında PolymorphismEmployee sınıfı Employee sınıfının getJobTitle() metodunu Override ederek değiştirmiştir.

Sonuç

Java Nesne Yönelimli Programlama mantığı içerisinde Polymorphism geni kapsamlı bir yapıya sahiptir. Geliştirme esnasında bir çok kolaylık sağlar. Java’da nesne yönelimli programlama yapısına dikkat edilerek geliştirilen projelerde büyük bir yer tutar. Kodun daha okunabilir, kolay değiştirilebilir olmasına büyük katkı sağlar.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Java Dersleri için tıklayınız..

Referanslar:
https://www.javaworld.com/article/3033445/learn-java/java-101-polymorphism-in-java.html
https://www.javaworld.com/article/2075223/core-java/reveal-the-magic-behind-subtype-polymorphism.html

Eren Başaran

Software Developer
Mobilhanem Yazarı

4 Yorum

  • Merhaba, yazınız detaylı ve akıcı anlatımda olmuş teşekkürler. overloading kısmındaki şu metodtan parametre ve metod içindeki değişken isimleri farklı görünüyor, aynı olması lazım.
    public int sum(double c, double d) {
    Double sum = a + b;
    return sum.intValue();
    }

  • Yıllardır tam olarak oturtamadığım Polymorphism konusu bu yazıdan sonra şak diye oturdu diyebilirim. Muazzam açıklayıcı olmuş. Ellerinize sağlık.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?