23.09.2013 Views

Ett kompendium om arv och gränssnitt

Ett kompendium om arv och gränssnitt

Ett kompendium om arv och gränssnitt

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.

superklassen. S<strong>om</strong> ses av figuren ovan så <strong>om</strong>definierar två av subklasserna superklassens<br />

draw() - metod.<br />

Fördelen med detta är att jag kan skapa en referensvariabel till superklassen Rectangle<br />

<strong>och</strong> tilldela denna ett objekt av en subklass.<br />

Rectangle cr = new ColorRectangle(…);<br />

cr.draw();<br />

Trots att cr är deklarerad s<strong>om</strong> en referensvariabel till superklassen Rectangle så<br />

k<strong>om</strong>mer anropet till dess draw() - metod att innebära ett anrop till den draw() - metod<br />

s<strong>om</strong> finns implementerad i klassen ColorRectangle. Detta p g a att<br />

objektet s<strong>om</strong> tilldelats referensvariabeln cr typbestämms vid exekvering.<br />

public void handleRectangle (Rectangle r)<br />

{<br />

…<br />

r.draw();<br />

…<br />

}<br />

Metoden handleRectangle demonstrerar ytterligare nyttan med polymorfism då<br />

denna kan anropas med alla objekt av typen Rectangle eller subklasser härav s<strong>om</strong><br />

argument. Om metoden anropas med en subklass s<strong>om</strong> ej har <strong>om</strong>definierat metoden<br />

draw() så k<strong>om</strong>mer superklassens metod att anropas.<br />

Obs! Endast metoder s<strong>om</strong> deklarerats i superklassen kan anropas på detta sätt:<br />

r.rotate(); går inte!<br />

3.12 Abstrakta klasser <strong>och</strong> metoder<br />

En önskvärd egenskap att ha hos en generell basklass är att kunna definiera metoder s<strong>om</strong><br />

saknar implementation.<br />

Antag att vi har en basklass Figur, vi vet att vi vill ha en metod rita(), men det är<br />

meningslöst att försöka implementera denna då vi inte vet vad för sorts figur s<strong>om</strong> skall<br />

ritas. Om vi däremot gör en subklass Kvadrat till Figur så kan vi ge metoden rita() en<br />

implementation efters<strong>om</strong> vi vet exakt hur en kvadrat skall ritas. Gen<strong>om</strong> att inte ge någon<br />

implementation av metoden rita() i klassen Figur vill vi tvinga alla subklasser att<br />

implementera denna.<br />

De metoder s<strong>om</strong> saknar implementation <strong>och</strong> bara innehåller namn, returtyp <strong>och</strong><br />

parametrar deklareras s<strong>om</strong> abstrakta.

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

Saved successfully!

Ooh no, something went wrong!