JavaSE Inheritance and Interface Bölüm-2

INHERITANCE – KALITIM

Java Nesne Yönelimli bir programlama dili olduğu için, gerçek hayatta nasıl canlılar bir birimden kalıtım alarak çoğalıyorlar ise, nasıl cansız varlıklar belli bir özellik gruplarına göre hiyerarşik sıralanıyor ve tanımlanıyor ise aynen böylede javada sınıflar bir birilerinden miras alma yolu ile türetilebiliyorlar.

  Bir sınıfın diğer bir sınıfı miras alması(extends) yani, bir üst sınıfın özelliklerini ve fonksiyonlarını direkt kullanması durumudur Inheritance.

  Bir nesneyi javada bir sınıf olarak tanımlamak istersek,

•nesneye ait özellikler java sınıfı içinde field(değişken)

•Nesneye ait işlevler java sınıfı içinde methos olarak tanımlanırlar

Örnek Bir Bisiklet Sınıfı

Bisiklet sınıfını miras almış, dağ bisikleti sınıfı. Bisiklet sınıfına ait tüm özellikleri taşıyor ancak kendisine ait olan özellikler ve işlevleri kendi sınıf gövdesi içinde tanımlayarak yeni bir tür ortaya koymuş oluyor.

INHERITANCE  – Alt Sınıf İle Ne Yapılabilir?

Bir sınıfı miras alan sınıfa alt sınıf ona miras veren sınıfa üst sınıf yani super class denilmektedir.

•Miras alınan alanlar, diğer tüm alanlar gibi doğrudan kullanılabilir.

•Alt sınıftaki bir alanı üst sınıftaki alanla aynı adla bildirebilir, böylece (hiding)gizleyebilirsiniz (önerilmez).

•Alt sınıfta, üst sınıfta olmayan yeni alanlar bildirebilirsiniz.

•Miras alınan yöntemler olduğu gibi doğrudan kullanılabilir.

•Alt sınıfta, üst sınıftaki ile aynı imzayı taşıyan yeni bir örnek yöntemi yazabilir ve böylece geçersiz kılabilirsiniz .

•Alt sınıfta, üst sınıftaki ile aynı imzayı taşıyan yeni bir statik yöntem yazabilir , böylece gizleyebilirsiniz .

•Üst sınıfta olmayan alt sınıfta yeni yöntemler bildirebilirsiniz.

•Üst sınıfın yapıcısını çağıran ya da anahtar sözcüğü kullanarak çağıran bir alt sınıf yapıcısı yazabilirsiniz(super)

OverridingandHidingMethods

Overriding İşleminde İnterface Yöntemleri-1

 

Eğer birden fazla Interface de aynı metotlar default parametresi ile tanımlı(declare) ise bu interfacelerde bulunan metodu kullanan bir sınıf ile override edilebilir ve kalıtım alacak sınıfa eklenebilir.

Eğer bir interface de olan bir method onu miras alan başka bir inteface de override edilmiş ise, sorunsuzca kullanılabilir. Miras Alınan başka bir interface in o merhodu ayrıca override ederek kullanmasına gerek yoktur.

Eğer bir sınıf kalıtım aldığı interface lerde bulunan metodları override etmiş ise ve diğer üst sınıf metodlarını çağırmak istiyorsa süper anahtarı ile bu metodları kullanabilir.

Eğer bir sınıf bir interface yi kalıtım almış ise kalıtım aldığı interface deki metotları implement etmek zorundadır, ancak bu metotları zaten bünyesinde barındıran bir sınıfı extends ederse böyle bir zorunluluk kalmayacaktır.

Overriding İşleminde Hata Durumları

Defining a Method with the Same Signature as a Superclass’s Method

  Superclass Instance Method Superclass Static Method
Subclass Instance Method Overrides Generates a compile-time error
Subclass Static Method Generates a compile-time error Hides

•Eğer bir alt sınıf üst sınıfdaki metotu kullanırsa Override işlemi olur

•Eğer bir alt sınıf üst sınıftaki metotu statik olarak tanımlar ise, compile-time error alır

•Eğer bir üst sınıfdaki statik metot alt sınıf tarafından normal bir şekilde derlenir ise compile-time error alır.

•Eğer bir üst sınıfta bulunan statik metot alt sınfta da statik olarak tanımlanır ise metot gizlenir(Hides).

Polymorphism – Çok Biçimlilik

 Polimorphism, kelime anlamı olarak bir organizmanın veya türün birden çok form da yaşamaya sahip olabilmesini tanımlar. Javada da bu ilke aynen kullanılır.

  Bunu iyi anlayabilmek için üç adet sınıf tanımlayacağız ve iki sınıf diğer sınıfı kalıtım alarak üstten gelen metotları override edecek. Temel olarak JVM her değişkende başvurulan nesne için uygun bir yöntem çağırır. Değişkenin türü tarafıdan tanımlanan yöntemi çağırmaz. Buna, «virtual method invocation» denir ve java dilinde önemli polimorphism özelliklerinin bir yönünü gösterir.

  Polimorphism de tek bir sınıf ile değişken tanımlayarak, be değişkenklere kalıtım alan sınıflar dahil olmak üzere nesne oluşturabiliriz. Burada aslında olay tek bir emir ifadesi ile birden fazla iş yaptığımızı düşünebilirsiniz.

  Örneğin, bir çiftlikte büyükbaş, kanatlı hayvan ve su canlıları olsun hepsi için ayrı ayrı emir vermek saçmadır. Yani; inekleri doyur, tavukları yemle, balıkları yemle gibi ayrı ayrı ifade için değişken tanımlamak yersizdir. Bunun yerine tek tanımda tek metot ile farklı işlevler yerine getirebiliriz.

Polymorphism – Örnek Kodlama

Super, anahtar kelimesini kullanmak

süper anahtar kelimesi, bir alt sınıfın üst sınıftaki bir metotu geçersiz kılması durumunda kullanılabilir ve üst sınıftaki metot çağırılabilir. Gizli bir alana atıfta bulunmak için de kullanabilirsiniz ancak gizlenmiş metot alanlarını kullanmanız önerilmez.

süper anahtar kelimesi, bir üst sınıfın yapıcısını çağırmak için de kullanılabilir. Ancak dikkat etmek gereken bir konu vardır, eğer çok fazla bir birinin yapıcısını çağıran sınıf var ise yapıcı zinciri oluşacaktır bu nedenle kullanırken dikkat etmek gereklidir.

Final Sınıfları ve Yöntemleri Yazmak

Final anahtar kelimesi, uygulandığı java nesnesinin değişmezliğini garanti eder.

•Eğer bir sınıfa final metotu eklerseniz o sınıf artık kalıtım alınamaz olur.

•Eğer bir değişkene final metodu uygularsanız bu metot kalıtım alan sınıflar tarafından override edilemez olur.

•Eğer bir değişkene final uygularsanız o değişken hiçbir şekilde değiştirilemez olur

Abstract Sınıflar

Abstract(Soyut) sınıflar kalıtım alınabilir ancak başlatılamazlar, ayrıca interface gibi kullanılır ek olarak metot gövdeleri yazılabilirdir. Burada Dikkat edilmesi gereken nokta şudur; abstract sınıf içinde gövdesi yazılan metotlar kalıtım alan sınıf tarafından override edilmek zorunda değildir. Ancak, metot gövdesi yazılmayan metotlar override edilmek zorundadır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir