Java Eğitimi 24- Inheritance(Kalıtım)

Merhabalar, 

Bu dersimizle birlikte artık Java’da kalıtım konusuna geçiş yapıyoruz.

Inheritance yani kalıtım; bir sınıfın başka bir sınıfa ait olan özellikleri almasıdır. Bunu biyolojiye uyarlayarak da anlayabiliriz. Örneğin bir timsah, kendisine ait birtakım genleri sürüngenler sınıfından almıştır ve bu genler kalıtım yoluyla aktarılır. Aynı şekilde sürüngenler de hayvan sınıfına dahil oldukları için o sınıftan türerler ve ortak özellikleri bulunur. Bu duruma miras da diyebiliriz. Amaç, kodun yeniden kullanılmasını sağlamaktır. Böylece aynı kodların tekrar tekrar yazılması önlenir ve karışıklık ortadan kalkar. Yeni oluşturulan sınıf, türetilmiş olan sınıfın global alanlarına sahip olur. Sahip olunan alanların public ve protected erişimli olması gerekir. Tabi ki private olanları bu durumun dışında tutuyoruz. 

Mesela kurt bir köpek türüdür. Her kurt bir köpektir de diyebiliriz ve köpeklere ait özellikler taşır. Ama kurdun da kendine özgü özelliklerinin olması onu diğer köpeklerden ayırır. Inheritance kelimesini de bu şekilde anlayabiliriz. 

Kalıtımın Özellikleri

  • Bir sınıftan diğer sınıfa özellik aktarımı söz konusudur.
  • Türeyen sınıfa yeni özellikler aktarılabilir. 
  • Bir class üzerinden birden fazla yeni class türetilebilir.
  • Değişkenlere ulaşımın olabilmesi için private değişken olmamaları gerekir. 
  • Sınıf isminin yanına “extends” kelimesi getirilerek türetme işlemi yapılır. 

Örneğin kendinizi düşünün. Fiziksel özelliklerinizi hem annenizden hem de babanızdan aldınız. Göz renginiz annenizinkine benzerken boyunuz babanıza çekmiştir. Ama saç yapınız size özeldir, annenize ya da babanıza benzemez. İşte anne babanızın yer aldığı sınıf Java kalıtımda süper sınıfın karşılığıdır, süper sınıflardan türetilen sınıflar da alt sınıf adını alır. 

public class altSinif extends superSinif{

//kodlar

}

Her alt sınıfın süper sınıfı olabilir ve bu alt sınıf, sahip olduğu süper sınıfın özelliklerini taşır. Ama bu süper sınıftan gelen her özelliğin olduğu gibi kalacağı anlamına gelmez. Süper sınıftan alınan birtakım özellikler değişime uğrayabilirler. Yani istemediğiniz özellikleri değiştirebilme imkanına sahipsiniz, aynı kodları kullanma gibi bir zorunluluğunuz yoktur. Ancak kötü bir tasarıma sebebiyet vermemek amacıyla kalıtım için kullandığınız kod basamaklarının kısa tutulması sizin için daha iyi olur. 

İlk örneğimiz üç sayının toplamı olsun. İki değişkeni üst sınıfta, bir değişkeni de alt sınıfta tanımlayalım. Ve bunları birleştirerek toplamı elde edelim. Bunun için altsinif, üstsinif ve kalıtım adı altında 3 tane class açalım. 


public class üstsinif {

int x,y;
void showxy(){
System.out.println("x ve y değerleri: " + x + "," + y);
}
}
public class altsinif extends üstsinif{

int z;
void showz(){
System.out.print("z değeri: " + z);
}
void toplam(){
System.out.println("x+y+z sayılarının toplamı=" + (x+y+z));
}
}

public class kalıtım {

public static void main(String[] args){
üstsinif ust_nesne= new üstsinif();
altsinif alt_nesne= new altsinif();

ust_nesne.x=30;
ust_nesne.y=16;
System.out.println("**Üst nesne ögelerinin değerleri şu şekildedir**");
ust_nesne.showxy();
System.out.println();

alt_nesne.x=52;
alt_nesne.y=8;
alt_nesne.z=43;
System.out.println("**Alt nesne ögelerinin değerleri şu şekildedir**");
alt_nesne.showxy();
alt_nesne.showz();
System.out.println();

System.out.println();
alt_nesne.toplam();

}
}

Şimdi bu kodları kısaca açıklayayım. Sınıf isimlerinden de belli olduğu gibi altsinif, üstsinif’ın alt sınıfıdır. Bu sebeple üst sınıfın kodları alt sınıf tarafından kullanılabilmektedir. Alt sınıf ve üst sınıf tanımlandıktan sonra kalıtım sınıfına geçiyoruz. Bu sınıf işlemleri yapabileceğimiz alanı bize sağlamış oluyor. ust_nesne.x=30; ve ust_nesne.y=16; ile anlık değişkenlere sınıf içerisinde atama yaptık. ust_nesne.showxy(); komutu ile de atama yaptığımız ögeleri yazdırmış olduk. Dolayısıyla diğer komutlar da bu şekilde ilerlemekte. Programın ekran çıktısı da

olarak görülür. Başka bir örnek olarak da arabaları göz önünde bulundurarak yazdığım programı sizlerle paylaşmak istiyorum.

public class sayısal {

protected int tekerlek_sayısı=4;
public void araba(){
System.out.println("Araba hareket ediyor..");
}
public static void main(String[] args){
sayısal sy=new sayısal();
sy.araba();
}
}

public class taşıt extends sayısal{

public static void main(String[] args){
taşıt tt=new taşıt();
tt.araba();
System.out.println("Tekerlek sayısı= " + tt.tekerlek_sayısı);
}
}

Bir sonraki yazıda görüşmek üzere. Hoşça kalın. 

Yorum bırakın