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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Yukarıdaki örnekte üç kavram mevcuttur, bunlardan biri yukarı çevirim (upcasting) diğeri polimorfizm ve<br />

son olarak da geç bağlama (late binding). ġimdi yukarı çevirim ve polimorfizm kavramlarını açıklayalım.<br />

Bu örneğimizde ana sınıf Asker sınıfıdır; bu sınıfdan türeyen sınıflar ise Er ve Yuzbasi sınıflarıdır. Bu iliĢki<br />

"bir" iliĢkisidir ; ()<br />

Er bir Askerdir, veya<br />

Yüzbası bir Askerdir, diyebiliriz.<br />

Yani Asker sınıfının yaptığı her iĢi Er sınıfı veya Yuzbasi sınıfı da yapabilir artı türetilen bu iki sınıf<br />

kendisine has özellikler taĢıyabilir, Asker sınıfı ile Er ve Yuzbasi sınıflarının arasında kalıtımsal bir iliĢki<br />

bulunmasından dolayı, Asker tipinde parametre kabul eden hazirOl() yordamına Er ve Yuzbasi<br />

tipindeki referansları paslayabildik, bu özelliğinde yukarı çevirim (upcasting) olduğunu geçen bölüm<br />

incelenmiĢti. ()<br />

Polimorfizm ise hazirOl() yordamının içerisinde gizlidir. Bu yordamın (method) içerisinde Asker<br />

tipinde olan a referansı kendisine gelen 2 değiĢik nesneye (Er ve Yuzbasi) bağlanabildi; bunlardan biri Er<br />

diğeri ise Yuzbasi’dır. Peki bu yordamın içerisinde neler olmaktadır? Sırası ile açıklarsak; ilk önce Asker<br />

nesnesine bağlı Asker tipindeki referansı, hazirOl() yordamına parametre olarak gönderiyoruz, burada<br />

herhangi bir terslik yoktur çünkü hazirOl() yordamı zaten Asker tipinde parametre kabul etmektedir. ()<br />

Burada dikkat edilmesi gereken husus, hazirOl() yordamının içerisinde Asker tipindeki yerel a<br />

değiĢkenimizin, kendi tipinden baĢka nesnelere de (Er ve Yuzbasi) bağlanabilmesidir; yani, Asker tipindeki<br />

yerel a değiĢkeni bir çok Ģekle girmiĢ bulunmaktadır. AĢağıdaki ifadelerin hepsi doğrudur: ()<br />

Asker a = new Asker() ;<br />

Asker a = new Er();<br />

Asker a = new Yuzbasi();<br />

Yukarıdaki ifadelere, Asker tipindeki a değiĢkenin açısından bakarsak, bu değiĢkenin bir çok nesneye<br />

bağlanabildiğini görürüz, bu özellik polimorfizm 'dir -ki bu özelliğin temelinde kalıtım (inheritance) yatar.<br />

ġimdi sıra geç bağlama (late binding) özelliğinin açıklanmasında.... ()<br />

6.2. Geç Bağlama (Late Binding)<br />

Polimorfizm olmadan, geç bağlamadan bahsedilemez bile, polimorfizm ve geç bağlama (late binding) bir<br />

elmanın iki yarısı gibidir. ġimdi kaldığımız yerden devam ediyoruz, Er nesnesine bağlı Er tipindeki<br />

referansımızı (e) hazirOl() yordamına parametre olarak gönderiyoruz. ()<br />

Gösterim-6.1:<br />

hazirOl(e); // yukari dogru cevirim (upcasting)<br />

Bu size ilk baĢta hata olarak gelebilir, ama arada kalıtım iliĢkisinden dolayı (Er bir Askerdir) nesneye<br />

yönelik programlama çerçevesinde bu olay doğrudur. En önemli kısım geliyor; Ģimdi, hangi nesnesin<br />

selamVer() yordamı çağrılacaktır? Asker nesnesinin mi? Yoksa Er nesnesinin mi ? Cevap: Er<br />

nesnesinin selamVer() yordamı çağrılacaktır. Çünkü Asker tipindeki yerel değiĢken (a) Er nesnesine<br />

bağlanmıĢtır. Eğer Er nesnesinin selamVer() yordamı olmasaydı o zaman Asker nesnesine ait olan<br />

137

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

Saved successfully!

Ooh no, something went wrong!