Ett kompendium om arv och gränssnitt
Ett kompendium om arv och gränssnitt
Ett kompendium om arv och gränssnitt
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: