Polimorfizm Java (Statik ve Dinamik)
Polimorfizm Nedir? Java?
Polimorfizm in Java Kalıtım yoluyla birbiriyle ilişkili bir veya daha fazla sınıf veya nesne olduğunda ortaya çıkar. Bir nesnenin birçok biçim alabilme yeteneğidir. Kalıtım, kullanıcıların nitelikleri ve yöntemleri devralmasına olanak tanır ve polimorfizm, bu yöntemleri farklı görevleri gerçekleştirmek için 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. Bir arama, bir kısa mesaj, bir resimli mesaj, bir e-posta vb. olabilir. Yani, amaç ortaktır, yani iletişimdir, ancak yaklaşımları farklıdır. Buna denir Polimorfizm. Şimdi Polimorfizmi öğreneceğiz. Java örnekle.
Tıkla okuyun videoya erişilemiyorsa
Java Örnekle OOP'larda Polimorfizm
Bir ebeveyn sınıfımız var, 'Hesap', para yatırma ve çekme işlevine sahip. Hesabın 2 alt sınıfı var. Para yatırma ve çekme işlemi Tasarruf ve Çek hesapları için aynıdır. Bu yüzden Hesap sınıfından miras alınan yöntemler çalışacaktır.
Yazılım Gereksinimindeki Değişiklik
Yazılım sektöründe çok yaygın olan gereksinim spesifikasyonunda bir değişiklik var. Overdraft Facility ile ayrıcalıklı Banka Hesabı işlevselliğini eklemeniz gerekiyor. Arkaplan için, overdraft, hesabınızdaki bakiyeden daha fazla bir miktarı çekebileceğiniz bir tesistir. Bu nedenle, ayrıcalıklı ihtiyaçlar için çekme yönteminin yeniden uygulanması gerekir. Ancak Tasarruf ve Çek hesabındaki test edilen kod parçasını değiştirmezsiniz. Bu, OOPS
) 1 Adım Öyle ki, hesap kaydetmeye yönelik “geri çekilen” yöntem çağrıldığında ana hesap sınıfından bir yöntem çalıştırılır.
) 2 Adım Ancak ayrıcalıklı hesaba (Kredili Mevduat İmkanı) ait “Para Çekme” yöntemi çağrıldığında, ayrıcalıklı sınıfta tanımlanan para çekme yöntemi çalıştırılır. Bu OOP'lerde polimorfizm.
Yöntem Geçersiz Kılma Java
Yöntem Geçersiz Kılma, bir alt sınıfta bir süper sınıf yönteminin yeniden tanımlanmasıdı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 eğer temel sınıfta özelse, alt sınıf onu genel hale getirebilir, ancak bunun tersi mümkün değildir.
Örnek E-posta
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 executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
Aşırı Yükleme ve Geçersiz Kılma Arasındaki Fark
Yöntem aşırı yüklemesi aynı sınıftadır; birden fazla yöntem aynı ada ancak farklı imzalara sahiptir. | Yöntem 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. |
Ex:
void sum (int a , int b); void sum (int a , int b, int c); void sum (float a, double b); |
Ex:
class X{ public int sum(){ // some code } } class Y extends X{ public int sum(){ //overridden method //signature is same } } |
Dinamik Polimorfizm Nedir?
OOP'lerde Dinamik Polimorfizm, üst sınıf ve alt sınıfta aynı ad ve imzayla birden fazla yöntemin tanımlanabildiği mekanizmadır. Geçersiz kılınan bir yönteme yapılan çağrı çalışma zamanında çözümlenir.
Dinamik Polimorfizm Örneği:
Süper sınıfın referans değişkeni bir alt sınıf nesnesine atıfta bulunabilir
Doctor obj = new Surgeon();
Açıklamayı dikkate alın
obj.treatPatient();
Burada referans değişkeni “obj” ana sınıfa aittir, ancak işaret ettiği nesne alt sınıfa aittir (aşağıdaki Polimorfizm diyagramı örneğinde gösterildiği gibi).
obj.treatPatient() alt sınıfın TreatPatient() yöntemini çalıştıracaktır – Surgeon
Bir yöntemi çağırmak için bir temel sınıf referansı kullanılıyorsa, çağrılacak yönteme, referansın işaret ettiği nesneye bağlı olarak JVM tarafından karar verilir.
Örneğin, obj, Doctor'a bir referans olmasına rağmen, bir Surgeon nesnesine işaret ettiğinden Surgeon'un yöntemini çağırır.
Buna çalışma zamanı sırasında karar verilir ve bu nedenle dinamik or çalışma zamanı polimorfizmi
Statik ve Dinamik Polimorfizm Arasındaki Fark
Statik Polimorfizm Java derleme zamanında bir yöntemi çağırmak için bilgi toplayan bir polimorfizm türüdür, Dinamik Polimorfizm ise çalışma zamanında bir yöntemi çağırmak için bilgi toplayan bir polimorfizm türüdür.
Yöntemin aşırı yüklenmesiyle ilgilidir. | Yöntem geçersiz kılma ile ilgilidir. |
Varsa hatalar derleme zamanında çözümlenir. Kod derleme sırasında çalıştırılmadığından statik adı da buradan gelir.
Ex: 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ınan bir yöntemi çağırması durumunda, çağrılacak yöntem, referans değişkeninizin işaret ettiği nesne tarafından belirlenir. Bu yalnızca kod yürütülürken çalışma zamanında belirlenebilir, dolayısıyla dinamik adı verilir.
Ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Süper Anahtar Kelime Java
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şlevselliğini gerçekleştirmek isterse ne olur? Bu durumda, anahtar sözcük super
alt sınıftan ana sınıfın yöntemlerine erişmek için kullanılabilir. Surgeon sınıfındaki treatPatient yöntemi şu şekilde yazılabilir:
treatPatient(){ super.treatPatient(); //add code specific to Surgeon }
Süper anahtar kelimesi, alt sınıftaki süper sınıfın herhangi bir veri üyesine veya yöntemine erişmek için kullanılabilir.
Daha sonra Süper anahtar kelimeyi öğreneceğiz. miras ve Polimorfizm Java Örnek programlarla.
Örnek: -Kalıtım, Polimorfizm ve süper anahtar kelimeyi öğrenmek için
) 1 Adım Aşağıdaki kodu bir Düzenleyiciye kopyalayın
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 Y public void m1(){ // overriden method System.out.println("This is method m1 of class Y"); } public void m2(){ super.m1(); System.out.println("This is method m2 of class Y"); } }
) 2 Adım Kodu kaydedin, derleyin ve çalıştırın. Çıktıyı gözlemleyin.
) 3 Adım 6-9 numaralı satırlardaki açıklamaları kaldırın. Kodu kaydedin, derleyin ve çalıştırın. Çıktıyı gözlemleyin.
) 4 Adım 10 numaralı satırın açıklamasını kaldırın. Kodu kaydedin ve derleyin.
) 5 Adım Hata = ? Bunun nedeni alt sınıfın süper sınıfın özel üyelerine erişememesidir.
ÖZET
- Nesneye Yönelik Programlamada çok biçimlilik, bir veya daha fazla sınıf veya nesnenin kalıtım yoluyla birbiriyle ilişkili olması durumunda ortaya çıkar. Bir nesnenin birçok biçim alabilme yeteneğidir.
- Yöntem Geçersiz Kılma, bir alt sınıfta bir süper sınıf yönteminin yeniden tanımlanmasıdır.
- Dinamik Polimorfizm Java üst sınıf ve alt sınıfta aynı isim ve imzayla birden fazla yöntemin tanımlanabildiği mekanizmadır.
- Statik Polimorfizm Java derleme zamanında bir yöntemi çağırmak için bilgi toplayan bir polimorfizm türüdür, Dinamik Polimorfizm ise çalışma zamanında bir yöntemi çağırmak için bilgi toplayan bir polimorfizm türüdür.
- Süper anahtar sözcüğü, alt sınıftan ana sınıfın metotlarına erişmek için kullanılabilir.