Overriding

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Overriding/överskuggning

En metod i en subklass kan "skymma" en metod i samma namn i superklassen. En variation av fordonssexemplet:

class Motorfordon {
    private double toppfart;
    double getToppfart() {
        return toppfart;
}

class Bil extends Motorfordon {
    int motorstyrka;
    int antal_hjul;

//Antar att toppfarten är motorstyrkan * 1.5
    double getToppfart() {
        return motorsyrka*1.5;
    }
}

Klassen Bil ärver en metod getToppfart() från Motorfordon, men definierar också sin egen. Om vi skapar en bil och anropar dess metod getToppfart() gäller att det är metoden i klassen Bil som anropas.

Bil b = new Bil();

b.getToppfart();

I allmänhet gäller att när en metod i en subklass har samma signatur (namn, antal argument och typer på argumenten) som en metod i superklassen är det subklassens metod som kommer att användas. Vi säger att metoden i subklassen överskuggar (engelska: overrides) metoden i superklassen.

Notera dock att i de flesta fall bör överskuggning undvikas. Användning av overriding ger då och då upphov till svårlokaliserade buggar.

En bättre lösning är vanligtvis att definiera en abstrakt klass. Se nästa avsnitt.