Java Polimorfizmi (Örneklerle)

Bu eğitimde, örnekler yardımıyla Java polimorfizmi ve uygulaması hakkında bilgi edineceğiz.

Çok biçimlilik, nesne yönelimli programlamanın önemli bir kavramıdır. Basitçe birden fazla form anlamına gelir.

Yani, aynı varlık (yöntem veya operatör veya nesne) farklı senaryolarda farklı işlemler gerçekleştirebilir.

Örnek: Java Polymorphism

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Çıktı

 Kare Oluşturuluyor… Çember Oluşturuluyor… 

Yukarıdaki örnekte, bir süper sınıf oluşturduk: Çokgen ve iki alt sınıf: Kare ve Daire. render()Yöntemin kullanımına dikkat edin .

render()Yöntemin temel amacı , şekli oluşturmaktır. Bununla birlikte, bir kareyi oluşturma süreci, bir daireyi oluşturma sürecinden farklıdır.

Dolayısıyla, render()yöntem farklı sınıflarda farklı davranır. Veya render()polimorfik diyebiliriz .

Neden Polimorfizm?

Çok biçimlilik, tutarlı kod oluşturmamızı sağlar. Önceki örnekte, farklı yöntemler de oluşturabiliriz: renderSquare()ve renderCircle()sırasıyla Kare ve Çember oluşturmak için.

Bu mükemmel çalışacak. Ancak her şekil için farklı yöntemler oluşturmamız gerekiyor. Kodumuzu tutarsız hale getirecek.

Bunu çözmek için Java'daki polimorfizm, render()farklı şekiller için farklı davranacak tek bir yöntem oluşturmamızı sağlar .

Not : print()Yöntem aynı zamanda bir polimorfizm örneğidir. Gibi farklı türde değerlerini yazdırmak için kullanılır char, int, stringvb

Java'da polimorfizmi aşağıdaki yollarla elde edebiliriz:

  1. Yöntemi Geçersiz Kılma
  2. Yöntem Aşırı Yükleme
  3. Operatör Aşırı Yüklemesi

Java Yöntemi Geçersiz Kılma

Java'da kalıtım sırasında, aynı yöntem hem üst sınıfta hem de alt sınıfta mevcutsa. Ardından, alt sınıftaki yöntem, üst sınıftaki aynı yöntemi geçersiz kılar. Buna yöntemi geçersiz kılma denir.

Bu durumda, aynı yöntem üst sınıfta bir işlem ve alt sınıfta başka bir işlem gerçekleştirecektir. Örneğin,

Örnek 1: Yöntemi geçersiz kılan çok biçimlilik

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Çıktı :

 Java Programlama Dili Ortak İngilizce Dili

Yukarıdaki örnekte, Dil adında bir üst sınıf ve Java adında bir alt sınıf oluşturduk. Burada yöntem displayInfo()hem Dil hem de Java'da mevcuttur.

Kullanımı displayInfo(), bilgileri yazdırmaktır. Ancak, Dil ve Java'da farklı bilgiler yazdırıyor.

Yöntemi çağırmak için kullanılan nesneye bağlı olarak ilgili bilgiler yazdırılır.

Java Polimorfizminin Çalışması

Not : Çağrılacak yöntem, programın yürütülmesi sırasında belirlenir. Dolayısıyla, yöntemi geçersiz kılma bir çalışma zamanı polimorfizmidir .

2. Java Yöntemi Aşırı Yüklemesi

Bir Java sınıfında, parametreler açısından farklılık gösteriyorlarsa aynı ada sahip yöntemler oluşturabiliriz. Örneğin,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

Bu, Java'da yöntem aşırı yükleme olarak bilinir. Burada aynı yöntem parametreye göre farklı işlemler gerçekleştirecektir.

Örnek 3: Yöntem aşırı yüklemesini kullanan çok biçimlilik

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Çıktı :

 ********** ##########

Yukarıdaki örnekte Pattern adında bir sınıf oluşturduk. Sınıf display(), aşırı yüklenmiş bir yöntem içerir .

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Burada ana işlevi display()kalıbı yazdırmaktır. Ancak, iletilen argümanlara göre yöntem farklı işlemler gerçekleştiriyor:

  • *hiçbir argüman iletilmezse, kalıbını yazdırır veya
  • tek chartip bağımsız değişken geçirilirse , parametrenin modelini yazdırır .

Not : Çağrılan yöntem derleyici tarafından belirlenir. Bu nedenle, derleme zamanı polimorfizmi olarak da bilinir.

3. Java Operatörünün Aşırı Yüklenmesi

Java'daki bazı operatörler, farklı işlenenlerle farklı davranır. Örneğin,

  • + işleci, sayısal toplama ve dize birleştirme gerçekleştirmek için aşırı yüklenmiş ve
  • operatörler gibi &, |ve !mantıksal ve bit işlemleri için aşırı yüklü.

Operatör aşırı yüklemesini kullanarak polimorfizmi nasıl elde edebileceğimizi görelim.

+Operatör iki varlık eklemek için kullanılır. Ancak Java'da +operatör iki işlem gerçekleştirir.

1. +Sayılarla birlikte kullanıldığında (tam sayılar ve kayan noktalı sayılar), matematiksel toplama yapar. Örneğin,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. +İşleci dizelerle kullandığımızda, dizge birleştirme gerçekleştirecektir (iki dizgeyi birleştirir). Örneğin,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

Yukarıdaki örnekte, ProgrammingLanguage sınıfının bir nesne değişkeni pl oluşturduk. Burada pl, polimorfik bir değişkendir. Bunun nedeni ise,

  • Açıklamada pl = new ProgrammingLanguage(), pl programminglanguage sınıfının nesnesine bakın.
  • Ve ifadede pl = new Java(), pl Java sınıfının nesnesine atıfta bulunur.

Bu, Java'da yukarı yayınlamanın bir örneğidir.

Ilginç makaleler...