Örnekle Java OOP'larında Polimorfizm

İçindekiler:

Anonim

Java'da Polimorfizm nedir?

Java'daki polimorfizm, kalıtım yoluyla birbiriyle ilişkili bir veya daha fazla sınıf veya nesne olduğunda ortaya çıkar. Başka bir deyişle, bir nesnenin birçok form alabilme yeteneğidir. Devralma, kullanıcıların öznitelikleri ve yöntemleri devralmasına izin verir ve çok biçimlilik, farklı görevleri gerçekleştirmek için bu yöntemleri kullanır. Yani amaç iletişim ama yaklaşım farklı.

Örneğin, iletişim için bir akıllı telefonunuz var. Seçtiğiniz iletişim modu herhangi bir şey olabilir. Bu bir çağrı, bir metin mesajı, bir resimli mesaj, posta vb. Olabilir. Dolayısıyla amaç ortak olan iletişimdir, ancak yaklaşımları farklıdır. Buna Polimorfizm denir .

Bu eğitimde öğreneceksiniz-

  • Polimorfizm nedir?
  • Örnek ile OOP'larda Java Polimorfizmi
  • Yöntemi Geçersiz Kılma
  • Aşırı Yükleme ve Geçersiz Kılma Arasındaki Fark
  • Dinamik Polimorfizm nedir?
  • Süper Anahtar Kelime
  • Statik ve Dinamik Polimorfizm Arasındaki Fark

Videoya erişilemiyorsa burayı tıklayın

Örnek ile OOP'larda Java Polimorfizmi

Bir ebeveyn sınıfımız var, para yatırma ve çekme işlevi olan 'Hesap'. Hesabın 2 alt sınıfı vardır Para yatırma ve çekme işlemi, Tasarruf ve Çek hesapları için aynıdır. Dolayısıyla, Account sınıfından miras alınan yöntemler çalışacaktır.

Yazılım Gereksinimindeki Değişiklik

Yazılım endüstrisinde çok yaygın olan gereksinim özelliklerinde bir değişiklik var. Kredili Mevduat Kredisi ile ayrıcalıklı Banka Hesabı eklemeniz gerekiyor.

Arka plan için, açık hesap, hesabınızdaki mevcut bakiyeden daha fazla bir miktarı çekebileceğiniz bir imkandır.

Öyleyse, ayrıcalıklı ihtiyaçlar için geri çekme yöntemi yeniden uygulanmalıdır. Ancak, Tasarruf ve Çek hesabında test edilen kod parçasını değiştirmezsiniz. Bu, OOPS'un avantajıdır

Adım 1) Öyle ki, hesabı kurtarmak için "geri çekilmiş" yöntemi çağrıldığında, ana hesap sınıfından bir yöntem yürütülür.

Adım 2) Ancak ayrıcalıklı hesap için "Para çekme" yöntemi (kredili mevduat tesisi) denildiğinde, ayrıcalıklı sınıfta tanımlanan para çekme yöntemi çalıştırılır. Bu Polimorfizmdir.

Yöntemi Geçersiz Kılma

Yöntemi Geçersiz Kılma, bir alt sınıfta bir süper sınıf yöntemini yeniden tanımlamaktır.

Yöntemi Geçersiz Kılma Kuralları

  • Yöntem imzası yani yöntem adı, parametre listesi ve dönüş türü tam olarak eşleşmelidir.
  • Geçersiz kılınan yöntem erişilebilirliği genişletebilir ancak daraltamaz, yani temel sınıfta özelse, alt sınıf onu genel yapabilir ancak tersi olamaz.

Misal

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Aşırı Yükleme ve Geçersiz Kılma Arasındaki Fark

Yöntem Aşırı Yükleme Yöntemi Geçersiz Kılma

Yöntem aşırı yüklemesi, birden fazla yöntemin aynı ada ancak farklı imzalara sahip olduğu aynı sınıftadır.

Yöntemi geçersiz kılma, süper sınıftaki yöntemlerden birinin alt sınıfta yeniden tanımlanmasıdır. Bu durumda yöntemin imzası aynı kalır.

Ör:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Ör:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Dinamik Polimorfizm nedir?

Dinamik Polimorfizm, üst sınıfta ve alt sınıfta birden çok yöntemin aynı ad ve imza ile tanımlanabildiği mekanizmadır. Geçersiz kılınan bir yönteme yapılan çağrı, çalışma zamanında çözülür.

Dinamik Polimorfizm Örneği:

Süper sınıfın bir referans değişkeni, bir alt sınıf nesnesine başvurabilir

Doctor obj = new Surgeon();

İfadeyi düşünün

obj.treatPatient();

Burada referans değişkeni "obj" üst sınıftır, ancak işaret ettiği nesne alt sınıftır (şemada gösterildiği gibi).


obj.treatPatient (), alt sınıfın TreatPatient () yöntemini çalıştıracak - Surgeon

Bir yöntemi çağırmak için bir temel sınıf başvurusu kullanılıyorsa, başvurunun işaret ettiği nesneye bağlı olarak çağrılacak yönteme JVM tarafından karar verilir.

Örneğin, obj Doktor'a bir referans olsa da, bir Surgeon nesnesine işaret ettiği için Surgeon yöntemini çağırır.

Buna çalışma zamanı sırasında karar verilir ve dolayısıyla dinamik veya çalışma zamanı polimorfizmi olarak adlandırılır.

Süper Anahtar Kelime

Surgeon sınıfındaki TreatPatient yöntemi Doctor sınıfında tanımlanan işlevselliği yürütmek ve ardından kendi özel işlevini gerçekleştirmek isterse ne olur?
Bu durumda anahtar kelime

superalt sınıftan üst sınıfın yöntemlerine erişmek için kullanılabilir.
Surgeon sınıfındaki tedaviPati yöntemi şu şekilde yazılabilir:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

The keyword super can be used to access any data member or methods of the super class in the sub class.
Example:-To learn Inheritance, Polymorphism & super keyword

Step 1) Copy the following code into an Editor

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Step 2) Save, Compile & Run the code. Observe the output.
Step 3) Uncomments lines # 6-9. Save, Compile & Run the code. Observe the output.
Step 4) Uncomment line # 10 . Save & Compile the code.
Step 5) Error = ? This is because sub-class cannot access private members of the super class.

Difference between Static & Dynamic Polymorphism

Static Polymorphism Dynamic Polymorphism
It relates to method overloading. It relates to method overriding.

Varsa, hatalar derleme sırasında çözülür. Kod derleme sırasında çalıştırılmadığından, adı statiktir.

Ör:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

Bir referans değişkeninin geçersiz kılınmış bir yöntemi çağırması durumunda, çağrılacak yöntem nesne tarafından belirlenir, referans değişkeniniz işaret eder. Bu, yalnızca kod yürütülürken çalışma zamanında belirlenebilir, dolayısıyla adı dinamiktir.

Ör:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();