Polimorfizm Java (Statik ve Dinamik)

⚡ Akıllı Özet

Polimorfizm Java Bu, tek bir arayüzün birçok formu temsil etmesine olanak tanır, böylece tek bir metot adı ilgili sınıflar arasında farklı davranır. Esnekliği, kodun yeniden kullanımını ve eski bankacılık, tıp ve kurumsal sistemlerin temiz bir şekilde genişletilmesini teşvik eden nesne yönelimli tasarımın temel taşlarından biridir.

  • 🎭 Birçok biçim, tek isim: Polimorfizm Java Aynı metot adının, yürütme zamanında gerçek nesne türüne bağlı olarak farklı uygulamalara yönlendirilmesine olanak tanır.
  • 🔀 İki tat: Derleme zamanı polimorfizmi Metot Aşırı Yükleme (Method Overloading) kullanırken, çalışma zamanı polimorfizmi kalıtım ve JVM aracılığıyla Metot Geçersiz Kılma (Method Overriding) kullanır.
  • ⛓️ Statik ve Dinamik Bağlama: Aşırı yüklenmiş çağrılar statik bağlama yoluyla derleme zamanında çözümlenirken, geçersiz kılınmış çağrılar dinamik bağlama yoluyla çalışma zamanında çözümlenir.
  • ✅ Süper anahtar kelime gücü: `super` anahtar kelimesi, bir alt sınıfın kendi özel davranışını eklemeden önce üst sınıfın uygulamasını çağırmasına olanak tanır.
  • 🧪 Gerçek dünya erişimi: Bankacılık hesapları, hastane personel hiyerarşileri ve şekil oluşturma motorları, test edilmiş kodu bozmadan yeni gereksinimler geliştirmek için polimorfizme dayanır.

Polimorfizm Java

Polimorfizm Nedir? Java?

Polimorfizm Java Bir veya daha fazla sınıf veya nesnenin kalıtım yoluyla birbirleriyle ilişkili olması durumunda ortaya çıkar. Bir nesnenin birçok biçim alabilme yeteneğidir. Kalıtım, kullanıcıların nitelikleri ve yöntemleri miras almasına olanak tanır ve polimorfizm bu yöntemleri farklı görevleri yerine getirmek için kullanır. Amaç iletişimdir, ancak yaklaşım farklılık gösterebilir.

Örneğin, iletişim için akıllı telefon kullanılır. İletişim şekli arama, kısa mesaj, resimli mesaj veya e-posta olabilir. Amaç ortaktır, yani iletişimdir, ancak yaklaşım farklıdır. Bu davranış, iletişimin özünü oluşturur. PolimorfizmŞimdi Polimorfizmi öğreneceğiz. Java Örnek kodlar, diyagramlar ve adım adım açıklamalarla birlikte.

Tıkla okuyun videoya erişilemiyorsa

Polimorfizmi Neden Kullanırız? Java?

Polimorfizm Java Bu yöntem, kodu esnek, yeniden kullanılabilir ve bakımı daha kolay hale getirdiği için kullanılır. Bir üst türün tek bir referans değişkeni, birden fazla alt nesneye işaret edebilir, bu nedenle aynı çağrı, sağlanan alt sınıfa göre uyarlanır. Bu model, test edilmiş kodun dokunulmadan kalmasını sağlarken, yeni davranışlar özel alt sınıflar aracılığıyla eklenir; bu da Spring ve Jakarta EE gibi çerçevelerin bu yönteme bağlı olmasının tam nedenidir.

Java Örnekle OOP'larda Polimorfizm

Örneğin, bir üst sınıfı ele alalım. Hesap Para yatırma ve çekme fonksiyonlarına sahip. Account sınıfının iki alt sınıfı vardır. Para yatırma ve çekme işlemleri tasarruf ve vadesiz hesaplar için aynıdır, bu nedenle Account sınıfından miras alınan yöntemler çalışacaktır.

Tek Miras Java

Java Polimorfizm Örneği

Yazılım Gereksinimindeki Değişiklik

Yazılım sektöründe sıkça rastlanan bir durum olan, gereksinim şartnamesinde bir değişiklik var. Ayrıcalıklı bir banka hesabına, hesap bakiyesinden daha fazla para çekme olanağı sağlayan bir ek fonksiyon eklenmesi gerekiyor. Ayrıcalıklı hesap için para çekme yönteminin yeniden uygulanması gerekirken, tasarruf ve vadesiz hesaplardaki test edilmiş kodlar olduğu gibi bırakılıyor. Bu izolasyonun avantajı da burada yatıyor. OOPS.

Java Polimorfizm

) 1 Adım Tasarruf hesabının para çekme yöntemi çağrıldığında, üst sınıf olan Hesap sınıfında tanımlanan yöntem yürütülür.

Java Polimorfizm

) 2 Adım Ayrıcalıklı hesap (kredili mevduat hesabı) için para çekme yöntemi çağrıldığında, ayrıcalıklı sınıfta tanımlanan para çekme yöntemi yürütülür. Bu dağıtım şöyledir: Nesne Yönelimli Programlamada Polimorfizm.

Java Polimorfizm

Yöntem Geçersiz Kılma Java

Metot geçersiz kılma, bir alt sınıfta üst sınıfa ait bir metodu yeniden tanımlama işlemidir. Alt sınıf aynı yapıyı korur.tracAncak, program çalıştırıldığında seçilen yeni bir uygulama sunar.

Yöntemi Geçersiz Kılma Kuralları

  • Metot imzası, yani metot adı, parametre listesi ve dönüş tipi, birebir aynı olmalıdır.
  • Geçersiz kılınan metot erişilebilirliği genişletebilir, ancak daraltamaz. Eğer metot temel sınıfta özel (private) ise, alt sınıf onu genel (public) yapabilir, ancak tersi mümkün değildir.

Yöntem Geçersiz Kılma Kuralları Java

Ö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();
  }
}

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

Metot aşırı yüklemesi, aynı sınıf içinde aynı metot adına sahip ancak farklı imzalara sahip metotlarda gerçekleşir. Metot geçersiz kılma ise üst sınıf-alt sınıf ilişkisinde gerçekleşir; burada alt sınıf, üst sınıfta tanımlanmış bir metodu yeniden tanımlar.

Yöntem Aşırı Yükleme
Yöntem Geçersiz Kılma
Metot aşırı yüklemesi, aynı sınıfta birden fazla metodun aynı isme sahip ancak farklı imzalara sahip olmasıdır. Metot geçersiz kılma, üst sınıftaki metotlardan birinin alt sınıfta yeniden tanımlanmasıdır. Bu durumda, metodun 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?

Nesne yönelimli programlamada dinamik polimorfizm, üst sınıfta ve alt sınıfta aynı isim ve imzaya sahip birden fazla metodun tanımlanabilmesini sağlayan mekanizmadır. Geçersiz kılınan bir metoda yapılan çağrı, JVM içindeki dinamik bağlama yoluyla çalışma zamanında çözümlenir.

Dinamik Polimorfizm Örneği

Üst sınıfa ait bir referans değişkeni, alt sınıfa ait bir nesneye referans verebilir:

 Doctor obj = new Surgeon();

Şu ifadeyi ele alalım:

obj.treatPatient();

Burada referans değişkeni obj Şekilde gösterildiği gibi, bu fonksiyon üst sınıfa aitken, işaret ettiği nesne alt sınıfa aittir.

Arama obj.treatPatient() Bu, Surgeon alt sınıfının treatPatient() yöntemini çalıştıracaktır. Bir yöntemi çağırmak için temel sınıf referansı kullanıldığında, çağrılacak yöntem, referansın işaret ettiği gerçek nesneye göre JVM tarafından belirlenir. obj Bu, Doktor'a bir göndermedir; Cerrah nesnesine işaret ettiği için Cerrah yöntemini çağırır. Karar çalışma zamanında verilir, bu yüzden bu şekilde adlandırılır. Dinamik Polimorfizm veya çalışma zamanı polimorfizmi.

Statik ve Dinamik Polimorfizm Arasındaki Fark

Statik Polimorfizm Java Geleneksel polimorfizm, bir metodu çağırmak için gereken bilgileri derleme zamanında toplayan bir polimorfizm türüdür; dinamik polimorfizm ise bir metodu çağırmak için gereken bilgileri çalışma zamanında toplayan bir polimorfizm türüdür.

Statik Polimorfizm
Dinamik Polimorfizm
Bu, Metot Aşırı Yüklemesi ile ilgilidir. Bu, Metot Geçersiz Kılma ile ilgilidir.
Varsa hatalar derleme sırasında çözülür. Kod derleme sırasında çalıştırılmadığı için adı statiktir.

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şkeni geçersiz kılınmış bir metodu çağırdığında, çağrılacak metot, referans değişkeninin işaret ettiği nesne tarafından belirlenir. Bu, yalnızca kod çalıştırılırken, yani çalışma zamanında belirlenebilir; bu nedenle adı dinamiktir.

Ex:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Süper Anahtar Kelime Java

Peki ya Surgeon sınıfındaki treatPatient metodu, Doctor sınıfında tanımlanan işlevselliği yürütmek ve ardından kendi özel davranışını gerçekleştirmek isterse? Bu durumda anahtar kelime 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
}

`super` anahtar kelimesi, alt sınıf içinde üst sınıfın herhangi bir veri üyesine veya yöntemine erişmek için kullanılabilir. Bir sonraki bölümde `super` anahtar kelimesi hakkında bilgi edineceğiz. mirasve Polimorfizm Java Örnek programlarla.

Örnek: Kalıtımı, Polimorfizmi ve `super` anahtar kelimesini öğrenmek için.

) 1 Adım Aşağıdaki kodu bir editöre 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(){
            // overridden 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 ila 9. satırlardaki yorum satırlarını kaldırın. Kodu kaydedin, derleyin ve çalıştırın. Çıktıyı inceleyin.

) 4 Adım 10. satırdaki yorum satırını kaldırın. Kodu kaydedin ve derleyin.

) 5 Adım Hata = ? Bunun nedeni, alt sınıfın üst sınıfın özel üyelerine erişememesidir.

SSS

Polimorfizm Java Nesnenin birçok biçim alabilme yeteneğidir. Aynı metot adı, çalışma zamanında hangi alt sınıf nesnesine referans verildiğine bağlı olarak farklı kodlar çalıştırabilir; bu da nesne yönelimli programlamanın temel davranışıdır.

Java Metot aşırı yüklemesi yoluyla derleme zamanı polimorfizmini ve metot geçersiz kılma yoluyla çalışma zamanı polimorfizmini destekler. Aşırı yükleme, statik bağlama yoluyla derleme zamanında çözümlenirken, geçersiz kılma, JVM tarafından işlenen dinamik bağlama yoluyla çalışma zamanında çözümlenir.

Statik bağlama, bir metot çağrısını derleme zamanında tanımına bağlar ve metot aşırı yüklemesi için kullanılır. Dinamik bağlama ise çağrıyı çalışma zamanında gerçek nesne türüne göre bağlar ve metot geçersiz kılmayı mümkün kılar. Java.

`super` anahtar kelimesi, bir alt sınıfın üst sınıfındaki geçersiz kılınmış metodu çağırmasına veya bir veri üyesine erişmesine olanak tanır. Bu, alt sınıfın üst sınıfın mantığını yeniden kullanmasına ve ardından bunun üzerine özelleştirilmiş davranışlar eklemesine izin verir.

ChatGPT ve GitHub Copilot Chat gibi yapay zeka destekli eğitmenler, Polimorfizmi açıklayabilir. Java Özel benzetmeler kullanarak alıştırma problemleri oluşturun, kalıtım ağaçlarını inceleyin ve öğrencilerin statik bağlama ile dinamik bağlama arasındaki farkı anlamaları için testler yapın, böylece daha hızlı öğrenme sağlayın.

Evet. Cursor, Sourcegraph Cody ve IntelliJ AI Assistant gibi yapay zeka destekli yeniden düzenleme yardımcıları, yinelenen koşullu ifadeleri tespit edebilir, sınıf hiyerarşileri önerebilir ve eski kodları yeniden yazabilir. Java Metot geçersiz kılma işleminin tekrarlanan if-else zincirlerini değiştirmesini sağlayacak şekilde kod yazın.

Bu yazıyı şu şekilde özetleyin: