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 classdan baska bir class türetme islemine inheritance denir. Türkçe karsiligi mirastir. Sonradan yazilan class daha önce yazilan classi 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 inheritancei anlatacagim, yazinin sonunda da 3 türün farklarini yazacagim. Bir örnek üzerinden giderek anlamaya çalisalim.
BaseClass : classA

Görüldügü üzere classA classinda 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 classina bakacak olursak, class baslangicinda “ public classA ” yazilmis. Bu demek oluyor ki classB classAdan türetilecek ve bu türetme çesidi de public olacak. Ek olarak class baslangicinin hemen üstüne de classA headerini ekliyoruz.

Yukaridaki kod örnegi de classBnin implementation dosyasina ait. Normal bir implementation dosyasindan bir kaç farki var. Birincisi member initializer olayi. Eger biz base classimizin constructorini default yapmazsak derived classin constructorinda member initializer syntaxi kullanarak baseclass constructorina parametre yollamamiz gerekmektedir. Eger bunu yapmazsak veya derived class içerisinde herhangi bir classA objecti 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 classAdan public olarak türemistir. Bu inheritance seklinde classB classAnin private hariç tüm kisimlarini kendisinin public kisimi gibi miras alir.
protected inheritance :
class classB : protected classA ifadesinde classB classAdan protected olarak türemistir. Bu inheritance seklinde classB classAnin private hariç tüm kisimlarini kendisinin protected kisimi gibi miras alir.
private inheritance :
class classB : private classA ifadesinde classB classAdan private olarak türemistir. Bu inheritance seklinde classB classAnin private hariç tüm kisimlarini kendisinin private kisimi gibi miras alir.
Java Inheritance
Javada tek türlü inheritance olayi mevcuttur, o da public inheritance. Bu nedenle bir classtan baska bir class türetilirken inheritance sekli yazilmaz. C++ daki base class
Javada 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 keywordu ile inheritance olayi gerçeklestirilmistir. Artik classBnin 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 Javada olmamasidir. Fakat multi interface inheritance olayi her iki dilde de mevcuttur.