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.
• 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.