Şimdi yükleniyor

Java Çokbiçimlilik (Polymorphism)

  • Nesneye dayalı programlamada üst sınıftan alt sınıfların nasıl türetildiğini gördük. Nesne oluştururken şimdiye kadar şu şablonu kullandık.

Sınıfİsmi nesneismi=new Sınıfİsmi();

Bu şablona göre öğretmen sınıfından bir nesne oluşturmak için kullanacağımız kod:

Öğretmen öğretmen1=new Öğretmen();

  • Poly Morphisim kelimesi yunanca poly (çok) ve morphos (biçim,şekil) kelimelerinin birleşmesinden oluşmuştur. Aslında şimdiye kadar anlatılmış olan metod aşırı yükleme ve metod ezme işlemleri çokbiçimliliğe birer örnektir. Bunun ötesinde çokbiçimlilik üst sınıfa bağlı alt sınıflardan üretilen nesnelerin aslında üst sınıf tipinde de tanımlanabilmesidir.
  • Alt sınıflardan nesne oluştururken alt sınıfın bağlı olduğu üst sınıfı da kullanabiliriz.
  • Çalışan çalışan1=new Öğretmen();Çalışan çalışan1=new Memur();Çalışan çalışan1=new Müdür();

    Görüldüğü üzere üst sınıfa bağlı alt sınıflardan nesne oluştururken üst sınıfı kullanabiliriz.

  • Java’da sınıflar arasında iki tür ilişkiden söz edilebilir, bunlar IS-A ilişkisi ve HAS-A ilişkisidir. Çokbiçimlilik bir IS-A ilişkisidir. Örneğimizden yola çıkarsak;
    • Müdür IS-A Çalışan,
    • Memur IS-A Çalışan,
    • Öğretmen IS-A Çalışan

    diye tanımlarız, yani müdür de memur da öğretmen de çalışandır deriz.

  • Çokbiçimlilik sayesinde oluşturduğumuz nesneyi üst sınıfın alt sınıfla aynı olan özelliklerini ve metodlarını kullanabilecek hale getirebiliriz.
  • Insan öğretmen1=new Öğretmen();
  • öğretmen1.çalış();Kodu çalıştırıldığında öğretmen sınıfına ait çalış metodu çalışacaktır ancak öğretmen sınıfına ait ve üst sınıfta olmayan özellikler kullanılmayacaktır.
    public class Çalışan(){
    public void çalış(){
    System.out.println(«Çalıştı»);
    }
    }
    
    Çalışan öğretmen1=new öğretmen();
    Öğretmen1.çalış();
    
    Öğretmen öğretmen1=new Öğretmen();
    Öğretmen1.çalış();
    
    public class Öğretmen extends Çalışan(){
    Date mezuniyettarihi;
    String uzmanlıkalanı;
    public void çalış(){
    System.out.println(«Derse girdi»);
    }
    public void sınavyap(){
    System.out.println(«Sınav yaptı»);
    }
    public void sınavoku(){
    System.out.println(«Sınav okudu»);
    }
    public void konuanlat(){
    System.out.println(«Konu anlattı»);
    }
    }
    

    Peki aralarındaki fark ne?

    • Çalışan öğretmen1=new Öğretmen();

    Çalışan üst sınıfından ancak öğretmen alt sınıfını referans gösteren bir nesne oluşur. Çalışan sınıfının içinde bulunan tüm özellikleri ve metodları kullanır, method overriding ile üst sınıf ile aynı olan alt sınıf metodlarını da alt sınıftan kullanır. Her iki sınıf için de çalış metodu ortaktır yani öğretmen sınıfının çalış metodu çalışan sınıfının çalış metodunu ezmiştir. Bu nesne dolayısıyla öğretmen sınıfının çalış metodunu kullanır.

    • Öğretmen öğretmen1=new Öğretmen();

    Öğretmen1.çalış(); kodu işlediğinde yine aynı sonuç çıkacaktır yani öğretmen sınıfının çalış metodu çalışacaktır ancak bu tür nesne oluşturmada öğretmene ait diğer tüm özellikler ve metodların kullandığı parametreler için bellekte yer açılacaktır. Programlama açısından kullanacağımız metod bize yeterli ise önceki yöntem boş yere yer kaplayacak nesneleri üretmemizi sağlayacaktır.

Yorum gönder