Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

C++ ve Java Inheritance

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,113
  • MFC Puanı
    10
  • MFC Seviyesi

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 class’dan 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 classB’nin 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 object’i 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 classA’dan public olarak türemiştir. Bu inheritance şeklinde classB classA’nı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 classA’dan protected olarak türemiştir. Bu inheritance şeklinde classB classA’nı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 classA’dan private olarak türemiştir. Bu inheritance şeklinde classB classA’nın private hariç tüm kısımlarını kendisinin private kısımı gibi miras alır.

Java Inheritance

Java’da tek türlü inheritance olayı mevcuttur, o da public inheritance. Bu nedenle bir class’tan başka bir class türetilirken inheritance şekli yazılmaz. C++ ’daki base class

Java’da 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 keyword’u ile inheritance olayı gerçekleştirilmiştir. Artık classB’nin 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 Java’da olmamasıdır. Fakat multi interface inheritance olayı her iki dilde de mevcuttur.
 
Üst Alt