Kurtbeyi
Misafir Editör
Bu yazıda C++ ile Java inheritance olaylarını anlatıp aradaki farklılıklardan bahsedeceğim. Öncelikle inheritance ne demek ona bakalım.
Inheritance; daha önceden yazılmış olan herhangi bir classdan başka bir class türetme işlemine inheritance denir. Türkçe karşılığı mirastır. Sonradan yazılan class daha önce yazılan classı temel aldığı için bu isim uygun görülmüştür.
C++ Inheritance
C++ dilinde 3 türlü inheritance olayı mevcuttur.
1 ) public inheritance
2 ) protected inheritance
3 ) private inheritance
Temel olarak public inheritanceı anlatacağım, yazının sonunda da 3 türün farklarını yazacağım. Bir örnek üzerinden giderek anlamaya çalışalım.
BaseClass : classA
Görüldüğü üzere classA classında bazı fonksiyonları virtual yaptık. Virtual demek, bir sonraki derivation ( türetme ) işleminde bu fonksiyonlar isteğe bağlı olarak override ( yeniden yazma ) edilebilir demektir.
Derived class : classB
Yukarıdaki kod örneği de classBnin implementation dosyasına ait. Normal bir implementation dosyasından bir kaç farkı var. Birincisi member initializer olayı. Eğer biz base classımızın constructorını default yapmazsak derived classın constructorında member initializer syntaxı kullanarak baseclass constructorına parametre yollamamız gerekmektedir. Eğer bunu yapmazsak veya derived class içerisinde herhangi bir classA objecti oluşturarak yollamaya çalışırsak bu bir syntax error verecektir. İkinci ise classB set ve get fonksiyonlarına sahip olmasına rağmen implement edilmemeleridir.
Son olarak ;
public inheritance :
class classB : public classA ifadesinde classB classAdan public olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin public kısımı gibi miras alır.
protected inheritance :
class classB : protected classA ifadesinde classB classAdan protected olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin protected kısımı gibi miras alır.
private inheritance :
class classB : private classA ifadesinde classB classAdan private olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin private kısımı gibi miras alır.
Java Inheritance
Javada tek türlü inheritance olayı mevcuttur, o da public inheritance. Bu nedenle bir classtan başka bir class türetilirken inheritance şekli yazılmaz. C++ daki base class
Javada super class, derived class ise subclass olarak geçer. Bir örnek üzerinde inceleyerek görelim.
Ve ondan türemiş bir subclass :
Görüldüğü gibi extends keywordu ile inheritance olayı gerçekleştirilmiştir. Artık classBnin de set ve get metotları mevcut. C++ daki base class constructor çağırılması burada super keyword une denk gelmektedir. C++ da member initializer kullanırken, burada super içerisine parametre verdik. Ayrıca super ifadesi constructor içerisinde ilk sırada yer almak zorundadır, eğer bu şart sağlanmazsa compile time error oluşur.
C++ ve Java arasındaki inheritance olayının en büyük farklarından birisi de C++ dilinde multi implementation inheritance ın olup Javada olmamasıdır. Fakat multi interface inheritance olayı her iki dilde de mevcuttur.
Inheritance; daha önceden yazılmış olan herhangi bir classdan başka bir class türetme işlemine inheritance denir. Türkçe karşılığı mirastır. Sonradan yazılan class daha önce yazılan classı temel aldığı için bu isim uygun görülmüştür.
C++ Inheritance
C++ dilinde 3 türlü inheritance olayı mevcuttur.
1 ) public inheritance
2 ) protected inheritance
3 ) private inheritance
Temel olarak public inheritanceı anlatacağım, yazının sonunda da 3 türün farklarını yazacağım. Bir örnek üzerinden giderek anlamaya çalışalım.
BaseClass : classA
Görüldüğü üzere classA classında bazı fonksiyonları virtual yaptık. Virtual demek, bir sonraki derivation ( türetme ) işleminde bu fonksiyonlar isteğe bağlı olarak override ( yeniden yazma ) edilebilir demektir.
Derived class : classB
Yukarıdaki kod örneği de classBnin implementation dosyasına ait. Normal bir implementation dosyasından bir kaç farkı var. Birincisi member initializer olayı. Eğer biz base classımızın constructorını default yapmazsak derived classın constructorında member initializer syntaxı kullanarak baseclass constructorına parametre yollamamız gerekmektedir. Eğer bunu yapmazsak veya derived class içerisinde herhangi bir classA objecti oluşturarak yollamaya çalışırsak bu bir syntax error verecektir. İkinci ise classB set ve get fonksiyonlarına sahip olmasına rağmen implement edilmemeleridir.
Son olarak ;
public inheritance :
class classB : public classA ifadesinde classB classAdan public olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin public kısımı gibi miras alır.
protected inheritance :
class classB : protected classA ifadesinde classB classAdan protected olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin protected kısımı gibi miras alır.
private inheritance :
class classB : private classA ifadesinde classB classAdan private olarak türemiştir. Bu inheritance şeklinde classB classAnın private hariç tüm kısımlarını kendisinin private kısımı gibi miras alır.
Java Inheritance
Javada tek türlü inheritance olayı mevcuttur, o da public inheritance. Bu nedenle bir classtan başka bir class türetilirken inheritance şekli yazılmaz. C++ daki base class
Javada super class, derived class ise subclass olarak geçer. Bir örnek üzerinde inceleyerek görelim.
Ve ondan türemiş bir subclass :
Görüldüğü gibi extends keywordu ile inheritance olayı gerçekleştirilmiştir. Artık classBnin de set ve get metotları mevcut. C++ daki base class constructor çağırılması burada super keyword une denk gelmektedir. C++ da member initializer kullanırken, burada super içerisine parametre verdik. Ayrıca super ifadesi constructor içerisinde ilk sırada yer almak zorundadır, eğer bu şart sağlanmazsa compile time error oluşur.
C++ ve Java arasındaki inheritance olayının en büyük farklarından birisi de C++ dilinde multi implementation inheritance ın olup Javada olmamasıdır. Fakat multi interface inheritance olayı her iki dilde de mevcuttur.