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

Create successful ePaper yourself

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

Om en konstruktor initialiserar en variabel så överrider det eventuell initialisering i<br />

variabeldeklarationen.<br />

3.6 Utökning <strong>och</strong> modifiering av beteende<br />

I Java finns det tre viktiga begrepp s<strong>om</strong> har att göra med hur man kan utöka <strong>och</strong><br />

modifiera en klass. Dessa begrepp är<br />

• gömma (hide)<br />

• <strong>om</strong>definiera (redefine) även kallat överrida (override)<br />

• överlagra (overload)<br />

Man kan gömma fält <strong>och</strong> klassmetoder. Att gömma fält innebär att man i subklassen<br />

deklarerar fält med samma namn s<strong>om</strong> finns i superklassen. Då har man gömt<br />

superklassens fält. Att gömma en klassmetod innebär att man i subklassen deklarerar en<br />

klassmetod med samma returtyp, namn <strong>och</strong> parametrar s<strong>om</strong> i superklassen, men med en<br />

annan implementation. Fält <strong>och</strong> klassmetoder kan endast gömmas, de kan inte<br />

<strong>om</strong>definieras eller tas bort.<br />

Man kan <strong>om</strong>definiera instansmetoder. Att <strong>om</strong>definiera en instansmetod innebär att man i<br />

subklassen deklarerar en instansmetod med samma returtyp, namn <strong>och</strong> parametrar s<strong>om</strong> i<br />

superklassen, men med en annan implementering.<br />

Man kan överlagra metoder. Att överlagra metoder (klassmetoder <strong>och</strong> instansmetoder)<br />

innebär att man deklarerar ytterligare metoder med samma namn s<strong>om</strong> en befintlig metod,<br />

men med andra parametrar <strong>och</strong> annan implementering. Överlagring kan göras både av<br />

ärvda metoder (rek<strong>om</strong>menderas ej!) <strong>och</strong> egna metoder.<br />

3.7 Gömmande av fält <strong>och</strong> klassmetoder<br />

Det s<strong>om</strong> kännetecknar gömmande är att det s<strong>om</strong> gömts ”fortfarande finns kvar” i den<br />

meningen att åtk<strong>om</strong>st fortfarande är möjlig enligt deklarerade åtk<strong>om</strong>st regler. För att<br />

k<strong>om</strong>ma åt en instansvariabel s<strong>om</strong> gömts kan man använda en referensvariabel av<br />

superklassens typ eller göra en explicit typecast. Detta gäller även för klassvariabler <strong>och</strong><br />

klassmetoder, dock kan dessa givetvis också accessas direkt utan att något objekt<br />

existerar.<br />

Antag att vi har en gömd instansvariabel ”storlek”, en gömd klassvariabel ”maxStorlek”<br />

<strong>och</strong> en gömd klassmetod ”AndraMaxStorlek()”s<strong>om</strong> ursprungligen deklarerats i klassen<br />

Bild, men s<strong>om</strong> gömts av subklassen Foto. Vi befinner oss i en tredje klass s<strong>om</strong> har<br />

åtk<strong>om</strong>st till klasserna Bild <strong>och</strong> Foto <strong>och</strong> vi har en referensvariabel ”aktuelltFoto” av<br />

klasstypen Foto s<strong>om</strong> refererar till ett objekt av klassen Foto. Då kan vi k<strong>om</strong>ma åt de<br />

gömda sakerna på följande sätt:

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

Saved successfully!

Ooh no, something went wrong!