Arv (er-en)
En subklasse arver egenskaper og metoder fra en superklasse og kan legge til eller endre. «Er-en»-relasjon: en Ball ER EN Sprite.
Slik kan du tenke om det
- Er-en-testen: les det høyt Sett ordene «ER EN» mellom klassene og les høyt. «En Fiende ER EN Sprite» klinger riktig, og da er det arv. «En Spilleliste ER EN Sang» klinger feil — prøv «HAR» i stedet, så lander du på komposisjon.
- Arv låner, den kopierer ikke Subklassen får ingen egen kopi av de arvede metodene. Har Ball ingen egen flytt(), går Python oppover til Sprite og bruker dens versjon — ved kjøring, hver gang. Derfor endrer en rettelse i superklassen oppførselen til alle som arver den, og det er der du skal lete etter feilen.
Vanlige feil
- Du tror arv kopierer koden inn i subklassen Det kan virke som om arv lager en kopi av forelderens kode i subklassen. Men subklassen «låner» forelderens metoder ved kjøring: endrer du forelderen, endres oppførselen til alle subklassene samtidig.
- Du bruker arv der det egentlig er komposisjon Det er lett å gripe til arv så snart to klasser henger sammen. Men arv passer bare når den ene ER EN av den andre. Hvis den ene heller HAR den andre, er det komposisjon. En spilleliste er ikke en sang — den har mange sanger.
- Du tror polymorfi krever en felles superklasse Polymorfi i Python handler om at objektene *svarer på det samme kallet*, ikke om hvor de stammer fra. Har både `Spiller` og `Fiende` en `tegn(skjerm)`, kan samme løkke tegne begge — uten at de arver fra noe felles. Python spør ikke etter stamtavlen, bare om metoden finnes (duck-typing).
Øv på dette
- Flervalg: er-en eller har-en?
- Sjekk: arver eller kopierer?
- Lag en ny sprite-type
- Herme: kjør sprite-hierarkiet
- Les arve-diagrammet
- Utvide: ny metode i superklassen
- Fra arve-diagram til kode
- Øving: arv med dyr
- Flervalg: arv, komposisjon, polymorfi eller abstraksjon?
- Kjøretøy: Bil og Sykkel arver
- Begrepssjekk: Arv og komposisjon
- Drill: Arv og komposisjon
- Drill: OOP-begreper (utfordring)
- Drill: OOP — skriv klassen
- Kodeløype: arv og komposisjon
- Diskuter: arv eller komposisjon?
- Fra kode til diagram
- Spiller og våpen: arv eller komposisjon?
- To design for et power-up i spillet: arv eller komposisjon?
- Refaktorer: to klasser som gjentar hverandre