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.

class SportmenMehmet extends BuzPatenci, Basketbolcu {<br />

}<br />

Spor.java derleme anında hata alacaktır. Bu ufak ayrıntıyı belirttikten sonra, kaldığımız yerden devam<br />

edelim. <strong>Java</strong>‘nın niye çoklu kalıtımı (multiple inheritance) desteklemediğini anlamak için aĢağıdaki<br />

gösterim incelenmelidir. ()<br />

Gösterim-7.2:<br />

Sporcu s = new SportmenMehmet(); // yukari dogru cevirim<br />

s.calis(); // ??<br />

Herhangi bir yerden, yukarıdaki gösterimde belirtildiği gibi bir ifade yazılmıĢ olsa, sonuç nasıl olurdu?<br />

Sporcu tipinde olan referans, SportmenMehmet nesnesine bağlanmıĢtır (bağlanabilir çünkü arada kalıtım<br />

iliĢkisi vardır). Fakat burada s.calis() ifadesi yazılırsa, hangi nesnenin calis() yordamı<br />

çağrılacaktır? BuzPatenci nesnesinin mi? Yoksa Basketbolcu nesnesinin mi? Sonuçta, calıs() yordamı,<br />

BuzPatenci ve Basketbolcu sınıflarının içerisinde iptal edilmiĢtir. Bu sorunun cevabı yoktur. Fakat çoklu<br />

kalıtımın bu zararlarından arıtılmıĢ versiyonunu yani arayüzleri (interface) ve dahili sınıflar (inner classes)<br />

kullanarak, diğer dillerinde bulunan çoklu kalıtım desteğini, <strong>Java</strong> programlama dilinde de bulmak<br />

mümkündür. ‗Peki ama nasıl?‘ diyenler için hemen örneğimizi verelim. Yukarıdaki örneğimizi <strong>Java</strong><br />

programlama diline uygun bir Ģekilde baĢtan yazalım ama öncesinde her zaman ki gibi iĢe UML<br />

diyagramını çizmekle baĢlayalım; ()<br />

Şekil-7.4.Arayüzlerin kullanılışı<br />

SportmenMehmet, belki aynı anda hem BuzPatenci hemde Basketbolcu olamaz ama onlara ait özelliklere<br />

sahip olabilir. Örneğin BuzPatenci gibi buz üzerinde kayabilir ve Basketbolcu gibi Ģut atabilir. Yukarıdaki<br />

UML diyagramı <strong>Java</strong> uygulamasına dönüĢtürülürse. ()<br />

Örnek: Spor2.java ()<br />

166

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

Saved successfully!

Ooh no, something went wrong!