what is polymorphism java tutorial with examples
Bu eğitici, Java'da Polimorfizmin ne olduğunu, polimorfizm türlerini ve derleme zamanı çok biçimliliğinin nasıl uygulanacağını örneklerle açıklar:
'Polimorfizm' kelimesi iki kelimeden türemiştir, örn. 'Poli' bu çok anlamına gelir ve ' morflar 'Anlam biçimleri. Dolayısıyla polimorfizm, birçok form anlamına gelir. Bir programlama dilinde, bir nesnenin birçok form alabileceğini ve dolayısıyla nesnenin polimorfik olduğunu söyleyebiliriz.
Polimorfizm, OOP'nin en önemli özelliklerinden biridir ve bir özelliği (bir nesne veya bir mesaj veya yöntem veya bir operatör) çeşitli şekillerde ifade etmemize izin verir.
=> Java Yeni Başlayanlar Kılavuzuna Bir Göz Atın.
Ne öğreneceksin:
Java'da Polimorfizme Giriş
Polimorfik varlık, farklı senaryolar altında farklı davranır.
Örneğin, Java'da bir '+' (toplama) operatörü düşünün. Bu bir ikili operatördür ve iki işlenen alır. '+' Operatörüne aktarılan işlenenler sayı olduğunda, iki sayının toplamını döndüren bir toplama işlemi gerçekleştirilir.
İşlenenler String türüne değiştiğinde, '+' operatörü String nesnelerini eklemez, ancak sonuçta elde edilen üçüncü bir dizeyi oluşturmak için dizenin içeriğini birleştirir veya birleştirir.
Örneğin, Eğer ' bir ' ve ' iki 'İki String nesnesinin içeriğidir 'Bir' + 'iki' sonuçlanacak ' bir iki ”. Bu birleştirme.
Java'da, hepsi 'Object' sınıfından türetildiği ve dolayısıyla Object sınıfı ile 'IS-A' ilişkisini yerine getirdiği için tüm nesneler polimorfiktir.
Bir nesneye her zaman söz konusu sınıf türünün bir referans değişkeni aracılığıyla erişilir. Belirli bir türdeki referans değişkeni bildirildikten sonra değiştirilemez. Ancak, referans değişkeni 'Son' olarak bildirilmezse, onu diğer nesnelere işaret edecek şekilde yeniden atayabiliriz.
Bu nesne referansının türü, çağrılması gereken sınıf yöntemlerine veya işlevlerine karar verecektir.
Örneğin,ABC'den türetilmiş bir ABC sınıfı ve XYZ sınıfı varsa, her iki sınıfın da polimorfik bir yöntemi func () vardır.
class ABC{ void func(){} } class XYZ extends ABC{ void func() {} } ABC türünde bir referans oluşturalım.
obj = new XYZ (); Şimdi func () yöntemini çağırdığımızda, obj tarafından işaret edilen nesne XYZ sınıfından olduğundan, XYZ sınıfından func () yöntemi çağrılacaktır.
Yukarıdaki örnekte gördüğümüz gibi, func () yönteminin farklı uygulamaları vardır, ancak aynı prototipi vardır. Referans nesnenin işaret ettiği nesneye bağlı olarak, bu senaryoda uygun uygulamaya sahibiz. Bu polimorfizmdir.
Java'da Polimorfizmi ayrıntılı olarak tartışalım.
Java Polimorfizm Örneği
Daha önce tartışıldığı gibi toplama işlemi ile Java'da basit bir polimorfizm örneğini anlayalım.
Burada aynı isimde ancak farklı parametrelere sahip iki yöntem kullanıyoruz. İlk işlev iki tamsayı parametresini kabul eder ve ikinci yöntem iki dize parametresini kabul eder.
Aktarılan parametrelerin türüne bağlı olarak, uygun yöntem çağrılır ve ya iki tamsayı ekler ve sonucu yazdırır ya da iki dizeyi birleştirir ve sonuçtaki dizeyi yazdırır.
Java programı aşağıda verilmiştir:
class Addition_operation{ //method to add two integers void addition_func(int num1,int num2){ System.out.println('ABC::addition_func:' + (num1+num2)); } //overloaded method to add two strings void addition_func(String str1, String str2){ String result = str1 + ' ' + str2; System.out.println('XYZ::addition_func:' + result); } } public class Main { public static void main(String() args) { Addition_operation abc = new Addition_operation(); //create a class object abc.addition_func (3,4); //calls 1st method abc.addition_func ('Hello' , 'World!'); //calls 2nd method } }Çıktı:

Burada gördük ki, ilk defa iki tamsayı parametresini toplama_işlevine geçirdiğimizde, ilk yöntemin çağrıldığını gördük. İkinci işlev çağrısında, iki String tipi parametre geçiririz ve bu nedenle ikinci aşırı yüklenmiş yöntem çağrılır.
Polimorfizm Türleri
Java, iki tür Polimorfizmi destekler:
- Derleme zamanı polimorfizmi
- Çalışma zamanı polimorfizmi

Adından da anlaşılacağı gibi, derleme zamanı polimorfizmi derleme zamanında gerçekleştirilir ve çalışma zamanı polimorfizmi çalışma zamanında yapılır.
Yukarıdaki şekilde gösterildiği gibi, Derleme zamanı polimorfizmi, Aşırı Yükleme yoluyla gerçekleştirilir. Yöntemi veya operatörü aşırı yükleyebiliriz. Çalışma zamanı polimorfizmi, Geçersiz Kılma yoluyla elde edilir.
Bu eğitimde, Derleme zamanı polimorfizmini ayrıntılı olarak tartışacağız. Sonraki derste çalışma zamanı polimorfizmini ele alacağız.
Java'da Derleme Zamanı Polimorfizmi
Derleme zamanı polimorfizmi, 'Statik polimorfizm' olarak da bilinir. Derleme zamanı polimorfizminin bir parçası olarak, gerçekleştirilecek polimorfizm ne olursa olsun, derleme zamanında gerçekleştirilir.
Java'da, derleme zamanı polimorfizmi ' Yöntem Aşırı Yükleme ”. Yöntem aşırı yüklemesini kullanarak, aynı ada sahip bir veya daha fazla yönteme sahip olabiliriz ve yalnızca parametrelerin sayıları, türü veya sırasına göre ayırt edilebiliriz.
Yöntem aşırı yükleme, Java'da derleme zamanı çok biçimliliğinin en yaygın uygulamasıdır. Java ayrıca operatör aşırı yüklemesini de destekler.
Genel olarak Java'da Aşırı Yükleme nedir?
Java'da aşırı yükleme, aynı ada ve dönüş türüne sahip, ancak argümanların sırası, sayısı ve türleri bakımından farklılık gösteren birden fazla yönteme sahip olma sürecidir. Genel olarak yöntem aşırı yükleme olarak da adlandırılır.
Java'da Yöntem Aşırı Yüklemesi
Yöntem aşırı yükleme, Java'da derleme zamanı çok biçimliliğinin bir uygulamasıdır. Aynı ada ve / veya dönüş tipine sahip ancak farklı parametre listelerine sahip bir veya daha fazla yöntemimiz olduğunda, yöntemleri “aşırı yüklediğimizi” söyleriz.
Dolayısıyla, belirli bir sınıfta, aynı ada ancak farklı argüman listelerine sahip çeşitli yöntemlere sahip olabiliriz.
Aşırı yüklenmiş yöntemleri nasıl çağırırız? Veya derleyici hangi yöntemin çağrılacağını nasıl biliyor?
Çağrıyla eşleşen kesin yöntemin çağrılması, parametre listesine bağlı olarak gerçekleştirilir.
Java'daki bir sınıfın birden fazla kurucuya sahip olabileceğini daha önce görmüştük. Yapıcılar söz konusu olduğunda, yapıcının kabul ettiği argümanlar listesi veya argümanlar tüm yapıcılarda farklıdır. Bu bir aşırı yükleme örneğidir. Dolayısıyla, yapıcı aşırı yüklemesi, Java'da yöntem aşırı yüklemesinin temel bir biçimidir.
Şimdi Java'da bir Yöntemin Nasıl Aşırı Yükleneceğini görelim mi?
Java, parametre / bağımsız değişken listesindeki değişikliklere bağlı olarak üç yöntem aşırı yükleme yolu sağlar.
# 1) Parametrelerin Türü
Parametrelerin veri türüne bağlı olarak Java'da yöntemleri aşırı yükleyebiliriz.
Üç yöntemin prototiplerini verdiğimiz aşağıdaki örneği düşünün.
toplama (int, int);
toplama (int, float);
toplama (Dize, Dize);
Yukarıdan görüldüğü gibi, her üç durumda da aynı yöntem adına ve aynı sayıda parametreye sahibiz, ancak her yöntem çağrısının farklı türde parametreleri vardır.
Yöntemlerin farklı türde parametreleri olduğu sürece, yöntemlerin aşırı yüklendiğini söyleyebiliriz. Yöntemi çağırdığımızda, derleyici parametrenin veri türüne karar verir ve yöntem çağrısı ile sağlanan parametre listesinin veri türüne bağlı olarak uygun yöntem çağrılır.
Örneğin,aşağıdaki gibi bir yöntem çağrımız varsa:
ek (3, 3.5);
Yukarıdaki yöntem çağrısında, birinci parametrenin int tipinde, ikinci parametrenin float tipinde olduğunu görebiliriz. Yukarıdaki çağrı ile karşılaşıldığında, derleyici parametre listesini çözer ve ardından yukarıdaki ikinci yöntem olan uygun yöntemi çağırır.
qa mühendisi mülakat soruları cevapları pdf
Şimdi, parametrelerin veri türlerine göre aşırı yöntem yüklemesini göstermek için eksiksiz bir Java programı uygulayalım.
class MethodOverload { //overloaded method - char parameter public void printParam(char ch) { System.out.println('Input character:' + ch); } //overloaded method - int parameter public void printParam(int num) { System.out.println('Input Number:' + num); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A'); //call overloaded method (char ) obj.printParam(10); //call overloaded method (int ) } } Çıktı:

# 2) Parametre Sayısı
Yöntem aşırı yüklemesinin başka bir uygulaması, yöntemlerin işlev çağrısında farklı sayıda parametrelere sahip aşırı yüklemesidir.
Örneğin,aşağıdaki yöntem bildirimlerini ele alalım:
addnum (int, int);
addnum (int, int, int);
Yukarıdaki yöntem bildirimlerinde, ilk yöntem bildiriminin iki parametresi ve ikinci bildiriminin üç parametresi vardır. Bir işlev çağrıldığında, derleyici parametre sayısını inceler ve ardından yöntem çağrısını uygun şekilde çözer.
Aşağıdaki örnek, parametre sayısına göre yöntem aşırı yüklemesini kullanan programı göstermektedir.
class MethodOverload { //overloaded method - 1 parameter public void printParam(char ch) { System.out.println(ch); } //overloaded method - 2 parameters public void printParam(char ch, int num) { System.out.println('Character: ' + ch + ' ; '+ 'Number:' +num); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A'); //call overloaded method (1 ) obj.printParam('A',10); //call overloaded method (2 ) } } Çıktı:

Bu örnekte, parametre sayısına göre aşırı yüklenmiş iki yöntemimiz var. İlk yöntem bir parametre alır ve ikinci yöntem iki parametre alır. Ana yöntemde, her iki yöntemi de birbiri ardına çağırıyoruz ve derleyici, belirtilen parametre sayısına bağlı olarak işlev çağrısını çözüyor.
# 3) Parametrelerin Sırası
Yöntem aşırı yüklemesinin uygulanmasına ilişkin üçüncü yaklaşım, aşırı yüklenmiş yöntemlerde parametre sırasına dayanır.
Aşağıdaki yöntem bildirimi örneğini düşünün,
toplam (int, float);
toplam (float, int);
Burada aşırı yüklenmiş bir yöntem toplamımız var. İlk bildirimde, parametreler int ve float şeklindedir. İkinci bildirimde de parametreler int ve float şeklindedir ancak parametre listesindeki sıraları değiştirilir.
Şimdi float parametresi, int parametresi ikinci iken ilk olarak görünür. Parametre sırasını değiştirerek yöntem aşırı yüklemesini gerçekleştirebiliriz.
Aşağıdaki Java programı bunu göstermektedir.
class MethodOverload { //overloaded method - char,int parameter public void printParam(char ch, int num) { System.out.println('Input character:' + ch + ' ; ' + 'Input Number:' + num); } //overloaded method - int,char parameter public void printParam(int num, char ch) { System.out.println('Input Number:' + num + ' ; ' + 'Input Character:' + ch); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A', 100); //call overloaded method (char,int) obj.printParam(100, 'A'); //call overloaded method (int,char) } } Çıktı:

Yukarıdaki programda, iki yöntem bildiriminde sırası değiştirilen int ve char parametrelerine sahip bir printParam aşırı yüklenmiş yöntemimiz var.
Geçersiz Yöntem Aşırı Yüklemesi Durumları
Şimdiye kadar, parametre listesini kullanarak yöntem aşırı yüklemesini tartıştık. Henüz dönüş yöntemini düşünmedik. Dönüş türlerine göre yöntemleri aşırı yüklemediğimizi unutmayın.
Örneğin, iki yöntem aynı ada ve aynı parametre listelerine sahipse ancak farklı dönüş türlerine sahipse, bu iki yöntemin aşırı yüklendiğini söylemiyoruz. Bu durum aşırı yükleme için geçersiz hale gelir.
Öyleyse, aşağıdaki beyanlara sahipsek:
I int (int, int);
Dize toplamı (int, int);
Bu durumda, iki yöntem aşırı yüklenmediği için derleyici bir hata verecektir. Bu nedenle, yalnızca dönüş türlerine dayalı olarak, yöntemler farklılaştırılmaz.
Bir Java programı kullanarak bu geçersiz durumu gösterelim.
class OverloadDemo { public double myMethod(int num1, int num2) { System.out.println('OverloadDemo::myMethod returns double'); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println('OverloadDemo::myMethod returns int'); return var1-var2; } } class Main { public static void main(String args()) { OverloadDemo obj2= new OverloadDemo(); obj2.myMethod(10,10); obj2.myMethod(20,12); } } Yukarıdaki programda, myMethod yönteminin iki prototipi vardır. Bir prototip iki int parametresi alır ve double döndürür. İkinci yöntem prototipi iki int parametresi alır ve bir int döndürür.
Yani bu programı derlediğimizde aşağıdaki çıktıyı alıyoruz.
Çıktı:

Yukarıdaki derleme hatası, yöntemin iki kez bildirildiğini gösterir. Bu, derleyicinin bu yöntemlerin yalnızca dönüş türüne göre aşırı yüklenmiş olduğunu düşünmediği anlamına gelir.
Operatör Aşırı Yüklemesi
Operatör aşırı yükleme, mevcut bir operatöre farklı bir anlamın verildiği bir aşırı yükleme mekanizmasıdır.
Bu eğitimin giriş bölümünde tartıştığımız gibi, bir toplama operatörü '+', operatör aşırı yüklemesinin klasik bir örneğidir.
Bu operatörün işlenenleri sayısal olduğunda, + operatörü iki değerin toplamını döndürür. Ancak işlenenler String türünde olduğunda, toplama işleminin sonucu bitiştirilmiş dizedir. Java'da yalnızca + (toplama) operatörünü aşırı yükleyebileceğimizi unutmayın.
Bu operatör iki işlevi yerine getirir:
- Tamsayılar veya sayısal değerler ekleme.
- Dizeleri birleştirme
Bu nedenle, Java'da operatör aşırı yükleme desteği, C ++ 'dan farklı olarak sınırlıdır; burada, sizeof, nokta operatörü vb.
Aşağıdaki program Java'da Operatör Aşırı Yüklemesini göstermektedir.
class OperatorOverload { //overloaded method for concatenating two strings void operator(String str1, String str2) { String resultStr = str1 + str2; System.out.println('Concatenated String: ' + resultStr); } //overloaded method for adding two numbers void operator(int num1, int num2) { int result = num1 + num2; System.out.println('Sum of two numbers : ' + result); } } class Main { public static void main(String() args) { OperatorOverload obj = new OperatorOverload(); obj.operator(10, 15); //add two numbers obj.operator('Hello ', 'World!!'); //concatenate two strings } } Çıktı:

Yukarıdaki programda, '+' operatörünü aşırı yükledik. Aşırı yüklenmiş yönteme iki tamsayı değeri ilettiğimizde, iki tamsayı toplamı döndürülür ve iki Strings geçildiğinde sonuç birleştirilmiş dizedir.
Aşırı yükleme ve derleme zamanı polimorfizmi ile ilgili olarak dikkat edilmesi gereken bazı noktalar.
- Yöntem aşırı yükleme, Statik polimorfizm olarak da bilinen derleme zamanı polimorfizmini uygulamanın yoludur.
- Statik polimorfizm, erken bağlama veya derleme zamanı bağlama olarak da bilinir.
- Parametrelerin ve işlev çağrısının bağlanması derleme zamanında gerçekleştiğinden, aşırı yüklemeye derleme zamanı bağlama adı verilir.
- Java'da yalnızca '+' operatörünü aşırı yükleyebiliriz ve bu, iki tamsayının eklenmesini veya iki dizenin birleştirilmesini gerçekleştirir.
Sıkça Sorulan Sorular
S # 1) Java'da Polimorfizme neden ihtiyacımız var?
Cevap: Çok biçimlilik, bir nesne için birçok uygulamaya sahip olmamızı sağlar. Yöntem aşırı yüklemesi sayesinde, hatırlanması zor olan farklı adlara sahip çok fazla yönteme ihtiyacımız yoktur. Bunun yerine aşırı yüklenmiş yöntemlere sahip olabiliriz, böylece benzer işlevleri yerine getiren yöntemlerin net bir şekilde uygulanmasına sahip olabiliriz.
Ayrıca, var olan sınıflara daha kolay bir şekilde daha fazla işlevsellik eklememize olanak tanıyan kalıtımın uygun şekilde uygulanmasına yardımcı olunması.
S # 2) Polimorfizm OOP nedir?
Cevap: Çok biçimliliğin Nesne yönelimli programlama tanımı, programlama dillerinin bir nesneyi çeşitli biçimlerde uygulama yeteneğini ifade eder. Çok biçimlilik aynı zamanda, bir programın ek işlevselliğe sahip olmak için ana sınıftan türetilmiş sınıfa yöntemleri geçersiz kılma yeteneği olarak da tanımlanır.
S # 3) Ana yöntemi aşırı yükleyip geçersiz kılabilir miyiz?
Cevap: Hayır. Statik ana yöntemi geçersiz kılamayız. Ana yöntemi aşırı yükleyebilsek de, JVM asla aşırı yüklenmiş ana yöntemi çağırmayacaktır. Bu yüzden en iyi cevap, ana yöntemi aşırı yüklememek veya geçersiz kılmak değildir.
S # 4) İnşaatçılar Aşırı Yüklenebilir mi?
Cevap: Evet, Java yöntemlerini aşırı yüklediğimiz gibi Java'daki kurucuları da aşırı yükleyebiliriz. Oluşturucular genellikle aynı ada ancak farklı sayıda argümana sahiptir.
S # 5) Yöntem Aşırı Yüklemesi neden faydalıdır?
Cevap: Yöntem aşırı yüklemesini kullanarak temiz kod yazabiliriz ve aynı ada sahip yöntemlere sahip olduğumuz için okunabilir hale gelir. Dolayısıyla, çeşitli veri türleri için işlevsellik uyguluyorsak, o zaman yöntemleri aşırı yükleyebiliriz ve kodu ayırmak daha kolay olacaktır.
Sonuç
Java'daki polimorfizm, bir nesnenin birçok biçime sahip olabileceği anlamına gelir. Java'daki polimorfizmin iki türü vardır: Derleme zamanı polimorfizmi ve Çalışma zamanı polimorfizmi. Derleme zamanı polimorfizmi, derleme zamanında yapılır. Derleme zamanı polimorfizmi statiktir ve yöntem aşırı yükleme ve operatör aşırı yükleme yoluyla uygulanır.
Çalışma zamanı polimorfizmi çalışma zamanında gerçekleştirilir ve dinamiktir. Yöntemin geçersiz kılınması kullanılarak uygulanır.
Bu öğreticide, yöntem aşırı yüklemesini uygulamanın yollarını gördük. Operatör aşırı yüklemesini de ayrıntılı olarak tartıştık. Java, yalnızca '+' operatörünün aşırı yüklenmesini destekler.
=> Kolay Java Eğitim Serisini Okuyun.
Önerilen Kaynaklar
- Java Dizesi () Örneklerle Yöntem Eğitimi içerir
- Java String length () Yöntem Örneklerle
- Java substring () Yöntemi - Örneklerle Eğitim
- Programlama Örnekleri ile Java Float Eğitimi
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- TreeMap In Java - Java TreeMap Örnekleriyle Öğretici
- Java Dize Eğitimi | Örneklerle Java Dize Yöntemleri
- Java Double - Programlama Örnekleriyle Öğretici