20 Mart 2015 Cuma

JAVA INHERITANCE(KALITIM), METHOD OVERRIDING, CASTING




INHERITANCE(KALITIM)


      Javada kalıtım kendi üst sınıfından özelliklerini alt sınıfların kalıtım yolu ile aktarmasıdır. Yani bir sınıfın extends ettiği sınıfın metod ve field'larını içermesini sağlar. Kalıtımı alınan sınıfa subclass(ana/süper sınıf), türeyen sınıfa ise superclass diyoruz. Bir ana/süper sınıf ve ondan türeyen alt sınıfımız vardır. Böylece kod tekrarından kurtularak güvenilir ve kullanışlı programlar yazmış oluruz.



Örnek :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85


public class Hayvan {
//Hayvanların Özellikleri

public void beslenme(){
System.out.println(“Hayvanlar beslenir.”);
}
public void barinma(){
System.out.println(“Hayvanlar barınır.”);
} public void boyut(){
System.out.println(“Hayvanların boyutları vardır.”);
}
public void solunum(){
System.out.println(“Hayvanlar solunum yapar.”); } } //Kus sınıfı public class Kus extends Hayvan { public void ucma() { System.out.println(“Kuşlar uçar.”);
} @Override
public void barinma() {

System.out.println(“Kuşlar samanlardan yaptıkları
+ “yuvalarda barınırlar.”);
}
} //Balık Sınıfı public class Balik extends Hayvan{ public void sudayuzer(){
System.out.println(“Balıklar suda yüzer.”);
}  
//Balıkların farklı bir özelliğini belirtiyoruz
//Balıktan türeyen sınıflar bu değişiklikten etkilenir.
@Override

public void solunum() {
System.out.println(“Balıklar solungaçları ile solunum yapar.”); } } //Güvercin Sınıfı public class Guvercin extends Kus{ //Güvercin hayvanların ortak özelliği olan beslenmeyi
//Kendine göre değiştiriyor
@Override
public void beslenme() {
System.out.println(“Güvercin buğday yer”);
} @Override
public void boyut() {
System.out.println(“Güvercinin boyutları 20-30 cm arasıdır.”); }  
} //Japon Balığı sınıfı
public class JaponBaligi extends Balik {  
//Mirası Hayvan sınıfından değil
//balik sınıfındaki değişmiş halini alır.
@Override
public void solunum() {

super.solunum();
} } //MainClass kodların çalıştırılacağı class public class MainClass {
//Kullanımları
public static void main(String[] args) {
Guvercin guvercin=new Guvercin();
Kus kus=new Kus();
guvercin.beslenme();
kus.beslenme(); System.out.println();

guvercin.barinma();
guvercin.boyut(); System.out.println();
kus.boyut();  
kus.solunum(); System.out.println();
Balik balik=new Balik();
balik.sudayuzer();
balik.solunum();
System.out.println();
JaponBaligi jb=new JaponBaligi();
jb.solunum();
} }


      Kalıtımın özellikleri;

  • Her sınıf Object sınıfından türer.
  • Ana Sınıfın özellikleri türüyen sınıfa aktarılır.
  • Bir sınıf en fazla bir tane sınıftan kalıtım alabilir. Fakat bir sınıftan birden çok sınıf kalıtım alabilir.
  • Ana sınıf içerisinde private olarak tanımlanan metodlar türüyen sınıf tarafından kalıtım alınamaz.
  • Anasınıf içerisinde tanımlanan bir metod türüyen sınıf içerisinde override(ezme) edilebilir
  • Türüyen sınıf içerisinde farklı metodlar ve alanlar tanımlanabilir
  • Ana sınıf içerisindeki bir metod veya field’a super anahtar kelimesiyle erişilebilir.

     super() Deyimi


     Herhangi bir süper sınıftan başlayan ve birden fazla alt sınıftan oluşan bir kalıtım ağacı düşünelim. Bu kalıtım ağacında en tepedeki sınıftan en aşağıya doğru akan bir şelalede; birden fazla süper sınıf ve alt sınıf bulunacaktır. Bu basamaklar silsilesi içerisinde tüm default yapılandırıcılar yukarıdan aşağıya java tarafından otomatik fakat gizli aktarılmaktadır. Bu yapılandırıcıları kullanmak için super(); deyimi kullanılmaktadır. Aşağıdaki örneğimizde Baliklar sınıfıma ait default yapılandırıcı 

1
2
3
4
5
6
7
8
9

class Baliklar extends Hayvan{

    public Baliklar(){

        super();

        System.out.println("Balıklar yüzebilen hayvanlardır.");

    }

    public solungac(){

        System.out.println("Balıkların solungaçları vardır.");

    }

}

şeklindedir. Bu ifade der ki; ben başlangıç özellikler için Hayvan süper sınıfının default yapılandırıcısını kullanacağım. Ancak eksik olan balıkların yüzme özelliğini de ekleyeceğim. Kalıtım uygulamalarında süper sınıfın default yapılandırıcıları burada olduğu gibi kısa ve öz olarak çağrılabilmektedir.

METHOD OVERRIDING


     Herhangi bir alt sınıfta süper sınıfa ait metotlar aynı isim, parametre ve dönüş tipi ile tanımlanırsa o metodu alt sınıfta üzerine yazmış oluruz (Overriding). Bu alt sınıftan yeni bir nesne ürettiğimizde süper sınıftan aldığımız metot ilk hali ile değil yeni sınıfımızın yeni nesnesine uygun olarak çalıştırılır. Burada işlev değişmemekle birlikte işlevin döndürdüğü sonuçlar değişebilmektedir. Bu şekilde çalıştırılabilen metotlar karşımıza override metotlar olarak çıkmaktadır. 
    Yukarıdaki örnekte Hayvan sınıfında tanımlanan fonksiyonlar, alt sınıflarda kullanıldıkça override edilmiştir. Örneğin Hayvan sınıfında tanımlanan fonksiyon

1
2
3
public void barinma(){
System.out.println(“Hayvanlar barınır.”);
}


Kus sınıfında


1
2
3
4
5
@Override
public void barinma() {
System.out.println(“Kuşlar samanlardan yaptıkları
+ “yuvalarda barınırlar.”);
}


şeklinde override edilmiştir.


CASTING


      Bir sınıf kalıtım alıdıgı sınıfa cast edilebilir (upcasting). Türüyen sınıfın referansını kalıtım aldığı ana sınıf referansına cast edebiliriz.

1
2
3
Hayvan hayvan=new Hayvan();
Baliklar balik=new Baliklar();
balik=hayvan;

1 yorum: