1. Men det er ikke alt.
Antag, at Cowklassen har en printAll()metode, der kalder to andre metoder. Så vil koden virke sådan:
| Kode | Beskrivelse |
|---|---|
|
|
|
Skærmoutput vil være:
|
Bemærk, at når printAll()metoden i Cowklassen kaldes på et Whaleobjekt,printNameWhale bruges klassens metodeCow , ikke metoden i metoden.
Det vigtigste er ikke den klasse metoden er skrevet i, men snarere typen (klassen) af det objekt, som metoden kaldes på.
Kun ikke-statiske metoder kan nedarves og tilsidesættes. Statiske metoder nedarves ikke og kan derfor ikke tilsidesættes.
Sådan Whaleser klassen ud efter anvendelse af arv og metodetilsidesættelse:
|
Sådan Whaleser klassen ud efter at have anvendt arv og metodetilsidesættelse: Vi kender ikke til nogen gammel printNamemetode. |
2. Typecasting
Der er en endnu mere interessant pointe her. Fordi en klasse arver alle metoder og data fra dens overordnede klasse, kan en reference til et objekt i den underordnede klasse lagres i (tildelt til) variabler, hvis type er den samme som den overordnede klasse (og forælderens overordnede osv. — helt op til klassen Object). Eksempel:
| Kode | Beskrivelse |
|---|---|
|
Skærmoutput vil være: |
|
Skærmoutput vil være: |
|
Skærmoutput vil være:Metoden toString()er nedarvet fra Objectklassen |
Dette er en meget værdifuld ejendom: lidt senere vil du forstå, hvordan du bruger den i praksis.
3. Kald en metode på et objekt
Når en metode kaldes på en variabel, kaldes metoden faktisk på et objekt. Denne mekanisme kaldes dynamisk metodeafsendelse.
Sådan ser det ud:
| Kode | Beskrivelse |
|---|---|
|
Skærmoutput vil være: |
|
Skærmoutput vil være: |
Bemærk, at den specifikke implementering af printName()metoden, der bliver kaldt — den i Coweller den i Whaleklassen — ikke bestemmes af variablens type, men af typen af objektet, som variablen refererer til.
Variablen Cowgemmer en reference til et Whaleobjekt, og den printName()metode, der er defineret i Whaleklassen, er det, der kaldes.
Dette er ikke særlig indlysende. Husk hovedreglen:
Sættet af tilgængelige metoder til at blive kaldt på en variabel bestemmes af variablens type. Og den specifikke metodeimplementering, der bliver kaldt, bestemmes af typen/klassen af objektet, der henvises til af variablen.
Du vil støde på dette hele tiden, så jo før du husker det, jo bedre.
GO TO FULL VERSION