Root > Documents > Programlama > C++ ve Java Inheritance
Cyber-Warrior.Org \ Doküman \ Programlama > C++ ve Java Inheritance
Madde
  Yazar : curtis
  Date : 21.12.2009 00:13:41
 
# C++ ve Java Inheritance
 
                              C++ ve Java dillerinde Inheritance Olayi

Bu yazida C++ ile Java inheritance olaylarini anlatip aradaki farkliliklardan bahsedecegim. Öncelikle inheritance ne demek ona bakalim.

Inheritance; daha önceden yazilmis olan herhangi bir class’dan baska bir class türetme islemine inheritance denir. Türkçe karsiligi mirastir. Sonradan yazilan class daha önce yazilan class’i temel aldigi için bu isim uygun görülmüstür.


C++ Inheritance

C++ dilinde 3 türlü inheritance olayi mevcuttur.

1 ) public inheritance
2 ) protected inheritance
3 ) private inheritance


Temel olarak public inheritance’i anlatacagim, yazinin sonunda da 3 türün farklarini yazacagim. Bir örnek üzerinden giderek anlamaya çalisalim.

BaseClass : classA


Görüldügü üzere classA class’inda bazi fonksiyonlari virtual yaptik. Virtual demek, bir sonraki derivation ( türetme ) isleminde bu fonksiyonlar istege bagli olarak override ( yeniden yazma ) edilebilir demektir.

Derived class : classB

classB class’ina bakacak olursak, class baslangicinda “ public classA ” yazilmis. Bu demek oluyor ki classB classA’dan türetilecek ve bu türetme çesidi de public olacak. Ek olarak class baslangicinin hemen üstüne de classA header’ini ekliyoruz.


Yukaridaki kod örnegi de classB’nin implementation dosyasina ait. Normal bir implementation dosyasindan bir kaç farki var. Birincisi member initializer olayi. Eger biz base class’imizin constructor’ini default yapmazsak derived class’in constructor’inda member initializer syntax’i kullanarak baseclass constructor’ina parametre yollamamiz gerekmektedir. Eger bunu yapmazsak veya derived class içerisinde herhangi bir classA object’i olusturarak yollamaya çalisirsak bu bir syntax error verecektir. Ikinci ise classB set ve get fonksiyonlarina sahip olmasina ragmen implement edilmemeleridir.


Son olarak ;

public inheritance :

class classB : public classA ifadesinde classB classA’dan public olarak türemistir. Bu inheritance seklinde classB classA’nin private hariç tüm kisimlarini kendisinin public kisimi gibi miras alir.

protected inheritance :

class classB : protected classA ifadesinde classB classA’dan protected olarak türemistir. Bu inheritance seklinde classB classA’nin private hariç tüm kisimlarini kendisinin protected kisimi gibi miras alir.

private inheritance :

class classB : private classA ifadesinde classB classA’dan private olarak türemistir. Bu inheritance seklinde classB classA’nin private hariç tüm kisimlarini kendisinin private kisimi gibi miras alir.


Java Inheritance

Java’da tek türlü inheritance olayi mevcuttur, o da public inheritance. Bu nedenle bir class’tan baska bir class türetilirken inheritance sekli yazilmaz. C++ ’daki base class

Java’da super class, derived class ise subclass olarak geçer. Bir örnek üzerinde inceleyerek görelim.

Iste bir superclass :


Ve ondan türemis bir subclass :




Görüldügü gibi extends keyword’u ile inheritance olayi gerçeklestirilmistir. Artik classB’nin de set ve get metotlari mevcut. C++ ’daki base class constructor çagirilmasi burada super keyword ’une denk gelmektedir. C++ ’da member initializer kullanirken, burada super içerisine parametre verdik. Ayrica super ifadesi constructor içerisinde ilk sirada yer almak zorundadir, eger bu sart saglanmazsa compile time error olusur.


C++ ve Java arasindaki inheritance olayinin en büyük farklarindan birisi de C++ dilinde multi implementation inheritance ’in olup Java’da olmamasidir. Fakat multi interface inheritance olayi her iki dilde de mevcuttur.

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©