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 :
Ö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; |
Elinize sağlık..
YanıtlaSil