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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
selamVer() yordamı çağrılacaktı fakat Er sınıfının içerisinde, ana sınıfa ait olan (Asker sınıfı)<br />
selamVer() yordamı iptal edildiğinden (override) dolayı, <strong>Java</strong>, Er nesnesinin selamVer() yordamını<br />
çağırılacaktır. Peki hangi nesnesinin selamVer() yordamının çağrılacağı ne zaman belli olur? Derleme<br />
anında mı (compile-time)? Yoksa çalıĢma anında mı (run-time)? Cevap; çalıĢma anında (run-time). Bunun<br />
sebebi, derleme anında hazirOl() yordamına hangi tür nesneye ait referansın gönderileceğinin belli<br />
olmamasıdır. ()<br />
Son olarak, Yuzbasi nesnesine bağlı Yuzbasi tipindeki referansımızı hazirOl() yordamına parametre<br />
olarak gönderiyoruz. Artık bu bize ĢaĢırtıcı gelmiyor... devam ediyoruz. Peki Ģimdi hangi nesneye ait<br />
selamVer() yordamı çağrılır? Asker nesnesinin mi? Yoksa Yuzbasi nesnesinin mi? Cevap Yuzbasi<br />
nesnesine ait olan selamVer() yordamının çağrılacağıdır çünkü Asker tipindeki yerel değiĢkenimiz heap<br />
alanındaki Yuzbasi nesnesine bağlıdır ve selamVer() yordamı Yuzbasi sınıfının içerisinde iptal<br />
edilmiĢtir (override). Eğer selamVer() yordamı Yuzbasi sınıfının içerisinde iptal edilmeseydi o zaman<br />
Asker sınıfına ait (ana sınıf) selamVer() yordamı çağrılacaktı. Aynı Ģekilde <strong>Java</strong> hangi nesnenin<br />
selamVer() yordamının çağrılacağına çalıĢma-anında (run-time) da karar verecektir yani geç bağlama<br />
özelliği devreye girmiĢ olacaktır. Eğer bir yordamın hangi nesneye ait olduğu çalıĢma anında belli oluyorsa<br />
bu olaya geç bağlama (late-binding) denir. Bu olayın tam tersi ise erken bağlamadır (early binding); yani,<br />
hangi nesnenin hangi yordamının çağrılacağı derleme anında bilinmesi. Bu örneğimiz çok fazla basit<br />
olduğu için, "Niye ! derleme anında hangi sınıf tipindeki referansın hazirOl() yordamına paslandığını<br />
bilemeyelim ki, çok kolay, önce Asker sınıfına ait bir referans sonra Er sınıfına ait bir referans ve en son<br />
olarak da Yuzbasi sınıfına ait bir referans bu yordama parametre olarak gönderiliyor iĢte..." diyebilirsiniz<br />
ama aĢağıdaki örneğimiz için aynı Ģeyi söylemeniz bu kadar kolay olmayacaktır ()<br />
Örnek: PolimorfizmOrnekIki.java ()<br />
class Hayvan {<br />
public void avYakala() {<br />
System.out.println("Hayvan avYakala");<br />
}<br />
}<br />
class Kartal extends Hayvan {<br />
public void avYakala() {<br />
System.out.println("Kartal avYakala");<br />
}<br />
}<br />
class Timsah extends Hayvan{<br />
public void avYakala() {<br />
System.out.println("Timsah avYakala");<br />
}<br />
}<br />
public class PolimorfizmOrnekIki {<br />
public static Hayvan rasgeleSec() {<br />
int sec = ( (int) (Math.random() *3) ) ;<br />
Hayvan h = null ;<br />
if (sec == 0) h = new Hayvan();<br />
if (sec == 1) h = new Kartal();<br />
if (sec == 2) h = new Timsah();<br />
return h;<br />
}<br />
public static void main(String args[]) {<br />
Hayvan[] h = new Hayvan[3];<br />
138