1. Valar och kor
Här är ett intressant zoologiskt faktum: en ko är mycket närmare en val än till exempel en flodhäst. Det visar sig att kor och valar är relativt nära släktingar.
Titta här. Låt oss berätta om polymorfism — ett annat mycket kraftfullt verktyg för OOP . Den har fyra funktioner.
2. Arv är inget universalmedel
Föreställ dig att du har skrivit en Cow
klass för ett spel. Den har många områden och metoder. Objekt i den här klassen kan göra olika saker: gå, äta och sova. Kor bär också en klocka som ringer när de går. Anta att du har implementerat allt i klassen till minsta detalj.
Och så kommer din klient och säger att hon vill släppa en ny spelnivå, där all action utspelar sig till sjöss, och huvudpersonen är en val.
Du börjar designa en Whale
klass och inser att den bara skiljer sig något från Cow
klassen. Logiken för båda klasserna är väldigt lika och du bestämmer dig för att använda arv.
Klassen Cow
är idealisk för att ta på sig rollen som förälderklassen: den har alla nödvändiga variabler och metoder. Allt vi behöver göra är att ge valen förmågan att simma. Men det finns ett problem: din val har ben, horn och en klocka. När allt kommer omkring är denna funktionalitet implementerad i Cow
klassen. Vad kan göras här?
3. Åsidosättande av metod
Metodöverskridande kommer till vår räddning. Om vi ärvt en metod som inte riktigt gör som vi vill i vår nya klass, kan vi ersätta den metoden med en annan.
Hur görs detta? I vår descendant klass deklarerar vi samma metod som metoden för den överordnade klassen som vi vill åsidosätta. Vi skriver vår nya kod i den. Och det är det — det är som om den gamla metoden i föräldraklassen helt enkelt inte existerar.
Så här fungerar det:
Koda | Beskrivning |
---|---|
|
|
|
Denna kod visar följande text på skärmen:
|
|
Denna kod visar följande på skärmen:
|
Efter att ha ärvt Cow
klassen och åsidosatt printName
metoden, Whale
innehåller klassen faktiskt följande data och metoder:
|
Vi känner inte till någon gammal metod. |
GO TO FULL VERSION