Java’da Inheritance (Kalıtım)

2823
görünümler

Bir önceki yazımızda constructorlar konusuna devam etmiştik. Bu dersimizde ise inheritance (kalıtım) yani miras alma konusuna değineceğiz.

Inheritance (Kalıtım) Nedir?

Bir sınıfın başka bir sınıftan özelliklerini ve metotlarını miras almasıdır.

Inheritance Ne İşe Yarar?

Bir projemiz olduğunu düşünelim. Ve projemizde bir şirketin çalışanlarını tasarlamak için sınıflar oluşturuyoruz. Mesela manager , product , sales , marketing gibi. Dikkat ederseniz tüm bu çalışanların departmanların ortak özellikleri ve metotları olabiliyor. Bu yüzden ortak özellikleri ve metotları tekrar tekrar bu sınıfın içine tanımlamak yerine bir tane ana sınıf oluşturup ve bu classın özelliklerini ve metotlarını almalarını sağlayabiliyoruz. Inheritance mantığı genelde bu şekilde.

Örnekle anlamaya çalışalım;

Örneğimizde bir tane ana sınıf oluşturucağız ve diğer class ın bu ana classtan özellikleri ve metotları inheritance almasını sağlayacağız. İlk olarak Calisan() adında ana class ımızı oluşturuyoruz. Sonrada Yonetici() class ını oluşturuyoruz. Yonetici() class ının Calisan() class ından özelliklerini ve metotlarını miras almasını sağlayacağız.

Calisan() class ımız ana class olduğu için : Superclass veya Baseclass deniliyor.

Yonetici() class ımızda miras alacağı için : Subclass olacak.

İlk olarak Calisan() sınıfını tasarlayacağız. Daha sonra Yonetici() sınıfının içinde miras almasını sağlayacağız.

Calisan() class ımızın ilk olarak 3 tane özelliğini (isim , maas, departman) yazdık. Sonrasında constructor ımızı oluşturduk. Ve ek olarak calis() , bilgileriGoster()  ve departman_degistir() metotlarımızı yazdık.

Şimdi bu fonksiyonları ve özellikleri Yonetici() class ında inheritance edelim.

İlk olarak yapmamız gereken şey Yonetici class ımızın isminin yanına aşağıdaki gibi düzenleme yapmak.

Başka bir class tan miras alabilmek için extends + class adı şeklinde yapmamız gerekiyor. Bunu yazdığımızda Calisan() sınıfının bütün özelliklerini ve metotlarını miras almak istiyorum demiş oluyoruz. Fakat sadece bu şekilde yapmamız yeterli olmuyor. Çünkü java bize uyarı verdi. Uyarıda bize bir tane constructor tanımlamamız gerektiğini söylüyor. Yonetici() class ına özgü bir tane constructor yazmamız gerekir.

Constructorımızı oluşturduk. Fakat içinde özellikleri normalde this.(ozellik adı) olacak şekilde yazmalıydık fakat miras alınacağı zaman constructor oluşturmak istediğimizde kullanacağımız anahtar kelime super kelimesidir. Bunun nedeni özellikler private olarak tanımlanmış ve başka bir classtan bu özellikleri direk olarak çağıramıyoruz. Dolaylı bir yoldan çağırabilmek için super anahtar kelimesini kullandık. Super yazarak aslında şunu demiş oluyoruz. Miras aldığımız Calisan class ının constructor ını kullanmak istiyorum.

Şimdi main classımız içinde bu Yonetici() classını çağırıyoruz.

Yonetici objemizi oluşturduk ve içine değerlerimizi yazdık. Bu şekilde yonetici constructorı çağrılmış olacak. O da calisan class ı içindeki constructor ı çağırmış olacak.

Sonrasında bilgileriGoster() metodumuzu çağırdık ve bilgileri ekrana yazdırdık. Inheritance ın mantığı bu şekilde. Eğer bizim bir ana sınıfımız var ise ve bu ana sınıfımızın altında alt class larımız olacaksa bütün ortak özellikleri ve metotları bir ana class ın altında biriktiyoruz.

Peki Yonetici() class ına farklı özellikler ekleyebiliyor muyuz?

Evet ekleyebiliriz.

Yonetici class ına ekstradan sorumlu olduğu kişi sayısını ekleyelim.

private int olarak sorumlu kişi sayısı özelliğini yazdık ve constructor içine de bu özelliğimizi ekledik. super in içine ekleyemedik çünkü Calisan() sınıfından almadık bu özelliği. Yonetici() class ında eklediğimiz için this.sorumlu_kisi = sorumlu_kisi; şeklinde yazdık.

Main metodumuza gelip  yonetici objemizi yarattığımız yerde sorumlu kişi sayısını ekleyebiliriz.

Şimdi de ekstradan metot ekleme işlemini görelim.

zam_yap() şeklinde bir metot yazdık. Ve ardından main metodumuz içinde bu metodu çağırdık.

Bu şekilde ekstra özellik ve metodumuzu eklemiş olduk.

Şimdi inheritance overriding konusuna değinelim.

Overriding Ne Demek?

Miras aldığımız metodları aynı isimle kendi classımızda da tanımlarsak bu metodu çağırdığımız zaman artık miras aldığımız değil kendi metodumuz çağrılacak. Yani kendi classımızda bulunan aynı isimli metot çağrılacaktır. Buna inheritance da ki overriding kavramı diyoruz. Overriding yaparak aslında super classtaki metodu iptal etmiş oluyoruz.

Örnekle anlamaya çalışalım.

Yonetici() classımızın içinde tekrardan bilgileriGoster() metodunu yazıyoruz ve overriding yapıyoruz. Calisan() sınıfındaki özellikleri burada kullanabilmemiz için Calisan sınıfındaki özelliklere getter ve setter metotlarını yazdık. Yonetici classı içinde yarattığımız metodun içinde bunları kullandık. Sadece ek olarak sorumlu kişi sayısı özelliğini ekledik. Sonrasında main metodumuz içinde bu metodumuzu çağırdığımızda çıktımız aşağıdaki gibi oldu.

Yeni yazmış olduğumuz overriding metodumuz çalışmış oldu.

Overriding yapmanın farklı bir yolu daha var.

şeklinde de oluşturabiliriz.

Bir sonraki yazımızda inheritance konularında ekstra detaylara gireceğiz. Sonraki derse geçmek için tıklayınız.

 

 

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz