06.03.2015 Views

Java Kitabı

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

}<br />

// diziyi doldur<br />

for (int i = 0 ; i < 3 ; i++) {<br />

h[i] = rasgeleSec(); //upcasting<br />

}<br />

// dizi elemanlarini ekrana bas<br />

for (int j = 0 ; j < 3 ; j++) {<br />

h[j].avYakala(); // !Dikkat!<br />

}<br />

Yukarıdaki örnekte bulunan kalıtım (inheritance) iliĢkisini, UML diyagramında gösterirsek:<br />

Şekil-6.1. Kalıtım, Polimorfizm ve Geç Bağlama<br />

PolimorfizmOrnekIki.java örneğimizde rasgeleSec() yordamı, rasgele Hayvan nesneleri oluĢturup geri<br />

döndürmektedir. Geri döndürülen bu Hayvan nesneleri, Hayvan tipindeki dizi içerisine atılmaktadır.<br />

Hayvan dizisine atılan Kartal ve Timsah nesnelerine <strong>Java</strong>‘nın kızmamasındaki sebep kalıtımdır. Kartal bir<br />

Hayvan'dır diyebiliyoruz aynı Ģekilde Timsah bir Hayvandır diyebiliyoruz; olaylara bu açıdan bakarsak<br />

Hayvan tipindeki dizi içerisine eleman atarken yukarı çevirim (upcasting) olduğunu fark edilir. ()<br />

Geç bağlama ise, Hayvan dizisinin içerisindeki elemanlara ait avYakala() yordamını çağırırken<br />

karĢımıza çıkar. Buradaki ilginç nokta hangi nesnenin avYakala() yordamının çağrılacağının derleme<br />

anında (compile-time) bilinemiyor olmasıdır. Nasıl yani diyenler için konuyu biraz daha açalım.<br />

rasgeleSec() yordamını incelersek, Math.random() yordamının her seferinde 0 ile 2 arasında<br />

rasgele sayılar ürettiği görülür. Bu üretilen sayılar doğrultusunda Hayvan nesnesi Kartal nesnesi veya<br />

Timsah nesnesi döndürülebilir; bu sebepten dolayı uygulamamızı her çalıĢtırdığımızda Hayvan tipindeki<br />

dizinin içerisine değiĢik tipteki nesnelerin, değiĢik sırada olabilecekleri görülür. Örneğin PolimorfizmIki<br />

uygulamamızı üç kere üst üste çalıĢtırıp çıkan sonuçları inceleyelim; Uygulamamızı çalıĢtırıyorum. ()<br />

Gösterim-6.2:<br />

java PolimorfizmIki<br />

Uygulamanın çıktısı aĢağıdaki gibidir;<br />

139

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!