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.

• Omdefinierade metoder måste ha samma signatur (dvs. samma namn <strong>och</strong><br />

parametrar) <strong>och</strong> samma returtyp s<strong>om</strong> originalet i superklassen. Dessut<strong>om</strong> måste<br />

exakt samma undantag deklareras i throws-satsen.<br />

• Utifrån k<strong>om</strong>mer man alltid att anropa de <strong>om</strong>definierade metoderna på ett objekt<br />

oavsett <strong>om</strong> man sätter referenstypen till subklassen eller superklassen.<br />

• Konstruktorn ärvs inte <strong>och</strong> kan således inte <strong>om</strong>definieras.<br />

• Metoder s<strong>om</strong> är final kan inte <strong>om</strong>definieras.<br />

• Metoder s<strong>om</strong> är private kan aldrig <strong>om</strong>definieras.<br />

• Accessrättigheterna för det s<strong>om</strong> <strong>om</strong>definieras/göms måste vara lika eller större än<br />

för det s<strong>om</strong> göms.<br />

3.9 Överlagring av metoder<br />

• Överlagring <strong>och</strong> <strong>om</strong>definiering sker var för sig i Java. Detta är en skillnad mellan<br />

Java <strong>och</strong> C++.<br />

• Överlagrade metoder måste ha samma namn <strong>och</strong> måste ha olika parametrar samt<br />

kan ha olika returtyp. Throws-satserna kan vara olika, dvs. olika undantag kan<br />

kastas.<br />

• Vid ett anrop till överlagrade metoder så bestäms vilken metod man ska ta gen<strong>om</strong><br />

att titta på metodernas signatur (dvs. namn <strong>och</strong> parametrar). Returtypen kan s<strong>om</strong><br />

sagt vara olika mellan de överlagrade metoderna.<br />

• Överlagrade metoder s<strong>om</strong> ärvs kan <strong>om</strong>definieras var <strong>och</strong> en för sig. De metoder<br />

s<strong>om</strong> inte <strong>om</strong>definieras ärvs s<strong>om</strong> de är. Ärvda metoder bör dock överhuvudtaget<br />

inte överlagras efters<strong>om</strong> det leder till svårläst kod.<br />

• Omdefinierade metoder kan överlagras, men detta bör undvikas.<br />

3.10 Objektreferenser i samband med <strong>arv</strong><br />

Fall 1: konvertering av objektreferenser uppåt i <strong>arv</strong>shierarkin.<br />

Om man har en objektreferens till ett objekt av en subklass, så kan denna objektreferens<br />

användas i alla sammanhang där en referens till någon av klassens superklasser kan<br />

användas. Det sker en implicit typkonvertering (cast) i detta fall då man går uppåt i<br />

<strong>arv</strong>shierarkin.<br />

Fall 2: konvertering av objektreferenser nedåt i <strong>arv</strong>shierarkin.<br />

En motsatt situation är <strong>om</strong> man har en referensvariabel s<strong>om</strong> är typad för en superklass,<br />

men s<strong>om</strong> innehåller ett referensvärde till en subklass, <strong>och</strong> man vill tilldela detta<br />

referensvärde till en annan referensvariabel s<strong>om</strong> är typad för subklassen. I detta fall måste<br />

man göra en explicit cast, <strong>och</strong> då bör man först testa med instanceof-operatorn för att<br />

försäkra sig <strong>om</strong> att cast:en är möjlig att göra.

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

Saved successfully!

Ooh no, something went wrong!