28 Haziran 2011 Salı

KALITIM (INHERITANCE)

En genel tanımıyla bir class dan yeni class lar türetmektir. Türetilen her class türediği class ın özelliklerini devralır. Peki neden bir class dan başka classlar türetiriz ki? Bunun cevabı son derece mükemmel. Tüm classlarda olan ortak özellikleri tek class da toplamak. Yani amaç ortak özellikleri tek bir çatı (class diyelim biz buna) altında toplamak.

ARABA
            TAKSİ
            -Fiat Albea
            -Volkswagen  Passat
            MİNİBÜS
            -Ford Transit
            -Hyundai  starex
            OTOBÜS
            -Mercedes Benz Travego
            -Man Fortuna

Dikkat edersek hepsi araba ve bir takım özellikleri aynı. Örneğin hepsinde gaz , fren , vites , teker vs. var. İşte biz bu ortak özellikleri olan nesnelere araba demişiz ve bu class ‘ ın adı da araba olmuş.
Gelelim kalıtım olayının Java classlarında nasıl uygulandığına  ;
Kalıtım classlarında türetmenin yapıldığı en üst class Temel sınıf (Base class) , türetilen classlara ise Türeyen class (derived class) denir. Aynı zamanda  kitaplarda şu isimleride görebilirsiniz. Base class a genelde Superclass  , derived calss a ise Subclass denir.
Türetme işi Java programlama dilinde extends anahtar sözcüğüyle yapılıyor. Şimdi bu anlattıklarımız üzere kodlarımızı yazalım.





public class Super {
    public static  void kimimben()
    {
        System.out.println("Ben super class ım ");
    }
}

Yukarıda temel class ımızı yazdık. Şimdi de bu classtan yeni bir class türetelim. Buraya dikkat ;

public  class tureyen  extends  Super {
    public static  void ben()
    {
        System.out.print("ben tureyen classım.Subclass");
    }
}
Tureyen classımızın adını yazdıktan sonra extend anahtar sözcüğünü kullanarak süper class yani ana classımızın adını yazdık. Bu ayrıntıya dikkat edelim.
Şimdi aklımıza şöyle bir soru takılailir. Acaba  subclass daki bir nesneyi kullanarak superclass daki bir nesneye erişmek mümkün mü? Evet mümkün. Kodları indirdiğiniz de bunun mümkün olduğunu derleyince görebilirsiniz.
Java dilinde Object  class ı tüm classların atasıdır. Bunu kdo yazarken bir nesneye erişmek için  . (nokta) koyduğunuz zaman görebilirsiniz.  Örneğin şöyle bir örnek verebiliriz. Kabul edelim ki Elips adında bir classımız olsun. Bu class Daire classından türetilmiş olmakla beraber Daire classı ise Grafik classından türetilmiştir.  Aşağıda ki resim bu olayı anlamak için yeterlidir.


super  tekniği

super()  tekniği sayesinde temel sınıfta tanımladığım ve ortak özellik olan şeyleri subclass da bir daha tanımlamama gerek kalmaz.
super () yapıcı metod içerisinde (constructor) mutlaka ilk satırda tanımlanmalıdır.
İndireceğiniz dosyada ki örneklerle super()  keywordunu iyi bir şekilde pekiştirebilirsiniz.
Java dilinde superclass üyelerinin  , subclass da yeniden bildirilmesine override denir. Yani superclass daki metod , subclass da geçersiz hale geliyor.


Şekilde ki okun aşağı inmesinin sebebi  erişim belirleyicileri arasındaki erişilebilirlik sınırlarının durumudur . Bu şekilde düşündüğümüzde  şunu söyleyebiliriz artık. Superclass da friendly erişim belirleyicisine sahip olan bir üye , subclass da ya protected ya da public olmalıdır.

Buraya tıklayarak konu ile alakalı kaynak kodları indirebilirsiniz.İyi çalışmalar...

Hiç yorum yok:

Yorum Gönder