Konular

Kalıtım

Kalıtım konusu nesneye yönelik programlamanın (object oriented programming) en önemli kavramlarındanbir tanesidir. Kalıtım kavramı, kısaca bir sınıftan diğer bir sınıfın türemesidir. Yeni türeyen sınıf, türetilen sınıfın global alanlarına ve yordamlarına (statik veya değil) otomatik olarak sahip olur (private olanlar hariç).
Kalıtım
Unutulmaması gereken unsur, yeni türeyen sınıf, türetilen sınıfın private global alanlarına ve yordamlarına (statik veya değil) otomatik olarak sahip olamaz. Ayrıca yeni türeyen sınıf eğer türetilen sınıf ile ayrı paketlerde ise yeni türeyen sınıf, türetilen sınıfın sadece public ve protected erişim belirleyicisine sahip olan global alanlarına (statik veya değil) ve yordamlarına (statik veya değil) otomatik olarak sahip olur.

 
class Kedi {
//..
}
class Kaplan extends Kedi {
//..
}
 
Kedi sınıfından türeyen Kaplan sınıfı… İki sınıf arasındaki ilişkiyi şöyle tarif edebiliriz, her Kaplan bir Kedi dir. Yani her kaplan kedisel özellikler taşıyacaktır ama bu özelliklerin üzerine kendisine bir şeyler eklemiştir. Yazılış ifadesi olarak, türeyen sınıf isminin yanına extends ifadesini koyarak, hemen sonrasında
kendisinden türetilme yapılan sınıfın kendisini yerleştiririz.

class Kedi {

    protected int ayakSayisi = 4;

    public void yakalaAv() {
        System.out.println("Kedi sinifi Av yakaladi");
    }

    public static void main(String args[]) {
        Kedi kd = new Kedi();
        kd.yakalaAv();
    }
}

class Kaplan extends Kedi {

    public static void main(String args[]) {
        Kaplan kp = new Kaplan();
        kp.yakalaAv();
        System.out.println("Ayak Sayisi = " + kp.ayakSayisi);

    }
}
 

Kaplan sınıfı Kedi sınıfından türemiştir. Görüldüğü üzere Kaplan sınıfının içerisinde ne yakalaAv() yordamı ne de ayaksayisi alanı tanımlanmıştır. Kaplan sınıfı bu özelliklerini kendisinin ana sınıfı olan Kedi sınıfından miras almıştır.  Kedi sınıfının içerisinde tanımlanmış ayaksayisi alanı, protected erişim belirleyicisine sahiptir. Bunun anlamı, bu alana aynı paket içerisinde olan sınıflar ve ayrı paket içerisinde olup bu sınıftan türetilmiş olan sınıfların erişebileceğidir. Böylece Kaplan sınıfı ister Kedi sınıfı ile aynı pakette olsun veya olmasın, Kedi sınıfına ait global int ilkel (primitive) tipindeki alanına (ayaksayisi) erişebilir. ( y orum e kle) Her sınıfın içerisine main yordamı yazarak onları tek başlarına çalışabilir bir hale sokabiliriz (standalone application); bu yöntem sınıfları test etmek açısından iyidir. Örneğin Kedi sınıfını çalıştırmak için komut satırından java Kedi veya Kaplan sınıfını çalıştırmak için java Kaplan yazılması yeterli olacaktır.


Kalıtım ve İlk Değer Alma Sırası

 Verilen örnekte, UcanYarasa nesnesi oluşmadan evvel, UcanYarasa sınıfının ana sınıfı olan Yarasa nesnesi oluşturulmaya çalışılacaktır. Fakat Yarasa sınıfıda Hayvan sınıfından türetildiği için daha öncesinde Hayvan sınıfına ait olan yapılandırıcı çalıştırılacaktır. Bu zincirleme giden olayın en başında ise Object sınıfı vardır.

Kalıtım
class Hayvan {

    public Hayvan() {
        System.out.println("Hayvan Yapilandiricisi");
    }
}

class Yarasa extends Hayvan {

    public Yarasa() {
        System.out.println("Yarasa Yapilandiricisi");
    }
}

class UcanYarasa extends Yarasa {

    public UcanYarasa() {
        System.out.println("UcanYarasa Yapilandiricisi");
    }

    public static void main(String args[]) {
        UcanYarasa uy = new UcanYarasa();
    }
}
 
 
Object sınıfını bir kenara koyarsak, ilk olarak Hayvan sınıfının yapılandırıcısı çalışacaktır, daha sonra Yarasa sınıfının yapılandırıcısı çalışacaktır ve en son olarak UcanYarasa sınıfının yapılandırıcısı çalışacaktır. Bu yapılandırıcıların hepsi, fark edildiği üzere varsayılan yapılandırıcıdır (default constructor).
Uygulamanın çıktısı aşağıdaki gibi olacaktır;

Hayvan Yapilandiricisi
Yarasa Yapilandiricisi
UcanYarasa Yapilandiricisi

Parametre Alan Yapılandırıcılar ve Kalıtım

            Ana sınıfa ait yapılandırıcı çağırma işlemi, varsayılan yapılandırıcılar için otomatik olarak yürürken, parametre alan yapılandırıcılar için olaylar biraz daha değişiktir. Kısacası, ana sınıfın parametre alan yapılandırıcısını açık olarak super anahtar kelimesi ile çağırmak gereklidir.

 
class Insan {
    public Insan(int par) {
        System.out.println("Insan Yapilandiricisi " + par);
    }
}

class ZekiInsan extends Insan {

    public ZekiInsan(int par) {
        super(par + 1); //dikkat
        System.out.println("ZekiInsan Yapilandiricisi " + par);
    }
}

class Hacker extends ZekiInsan {

//class Hacker {
    public Hacker(int par) {
        super(par + 1); //dikkat
        System.out.println("Hacker Yapilandiricisi " + par);
    }

    public Hacker() { //Devreye girmiyor çünkü Yapılandırıcılardan integer argümanı olan çağrılıyor
        super(1);
        System.out.println("Hacker Yapilandiricisi parametresiz ");
    }

    public static void main(String args[]) {
        //Hacker hck = new Hacker(); Parametresiz Yapılandırıcı çalışacaktı
        Hacker hck = new Hacker(5);
       
    }
}
Kalıtım


  Parametre Alan Yapılandırıcıların Seçimi ve Kalıtım
class Insan {
    public Insan(int par) {
        System.out.println("Insan Yapilandiricisi " + par);
    }
}

class ZekiInsan extends Insan {

    public ZekiInsan(int par) {
        super(par + 1); //dikkat
        System.out.println("ZekiInsan Yapilandiricisi " + par);
    }
}

class Hacker extends ZekiInsan {

//class Hacker {
    public Hacker(int par) {
        super(par + 1); //dikkat
        System.out.println("Hacker Yapilandiricisi " + par);
    }

    public Hacker() { //Devreye girmiyor çünkü Yapılandırıcılardan integer argümanı olan çağrılıyor
        this(5);        
        System.out.println("Hacker Yapilandiricisi parametresiz ");
    }

    public static void main(String args[]) {
        Hacker hck = new Hacker(); //Yapılandırıclar parametre beklerler
        //Hacker hck = new Hacker(5);
       
    }
}
 
 Kalıtım
Yorumunuzu Ekleyin

Java Değişken Tipleri

Byte, short, int, long, float, double, boolean, char, string

59,423 Okunma Henüz yorum yapılmamış 04/11/2009 13:11:31

Java Diziler

Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez

57,259 Okunma 2 Yorum 19/11/2007 15:13:25

Javada Fonksiyonlar

Değer alan ve geriye değer döndüren fonksiyonlar

55,225 Okunma Henüz yorum yapılmamış 01/04/2010 14:39:09

Stringleri Karşılaştırma

Stringler bilinen = operatörleri ile karşılaştırılmazlar, ayrıca == ve != operatörleride stringler içindeki karakterleri karşılaştırmazlar

40,810 Okunma Henüz yorum yapılmamış 18/10/2007 12:43:49

Java Da Operatörler

Aritmetik operatorler 4 işlem ve mod, arttırma operatorleri, ilişkisel operatorler, mantıksal operatorler, kısa devre mantıksal operatorler

39,877 Okunma Henüz yorum yapılmamış 02/12/2009 13:58:19

J2ee, j2se, j2me Nedir?

J2ee,j2se,j2me hakkında bilgi

36,164 Okunma 1 Yorum 21/10/2009 17:00:15 16/07/2014 17:00:35

Java Terimleri

Java, birbirinden farklı aygıtlarda çalışabilen, bu aygıtlar arasında iletişimi kolay hale getiren programlama dili ve platformudur. Java diliyle yazılmış programlar, Windows, UNIX, Mac işletim sistemi yüklü bilgisayarlarda hiç bir değişiklik yapmayı gerektirmeden çalışabilmektedirler

35,579 Okunma Henüz yorum yapılmamış 16/10/2007 13:23:36

Javada Diziler

Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen dizi erişim indisi ile erişilir. Bir dizide n tane eleman varsa dizinin uzunluğu da n kadardır; ilk elemanın indisi/konumu 0’dan başlar, son elemanı ise n-1’dir.

30,856 Okunma 1 Yorum 14/04/2008 11:01:20

for Döngüsü

28,625 Okunma Henüz yorum yapılmamış 30/12/2009 11:02:00

Java 3D

Son yıllarda çoklu ortamda ilerleme kaydeden Java, Java3D ile yüksek performans isteyen üç boyutlu grafiklerde de 'Ben varım!' diyor.

27,455 Okunma Henüz yorum yapılmamış 26/01/2009 22:23:10

while döngüsü

Dizilerin olmazsa olmazı

26,736 Okunma Henüz yorum yapılmamış 17/12/2009 10:53:28

Java Operatörleri

Mod Operatörü, Aritmetik Atama Operatörü, Arttırma Azaltma Operatörleri, Iliskisel Operatorler ve Kısa Devre Iliskisel Operatörler, Kısa devre iliskisel operatorler, ? Operatoru

26,712 Okunma Henüz yorum yapılmamış 04/12/2009 12:11:34

Yükleniyor...