Subklasser og arv
Noen ganger har vi behov for å ha flere varianter av et objekt. I klassen Bil, som vi opprettet i artikkelen "Objekter og klasser", vil vi kanskje også legge til muligheten for å legge inn elbiler, og da trenger vi gjerne noe mer informasjon, som batterikapasitet og batteristatus. Disse objektvariablene vil ikke være relevante for fossildrevne biler. Da kan vi lage en annen variant av klassen Bil, som vi kaller Elbil. Denne klassen kan ha alle de samme objektvariablene og metodene som klassen Bil, men vil i tillegg ha sine egne objektvariabler og metoder. Vi kan opprette denne nye klassen som en subklasse av klassen Bil, slik:
Vi kan se at Elbil er en subklasse av Bil ved å se på den første linja, der det står class
Elbil
extends
Bil
. Dette betyr at Elbil er en utvidelse av Bil. I første linje i konstruktøren henter vi objektvariablene fra superklassen Bil, før vi setter objektvariablene som er spesifikke for Elbil (batterikapasitet og batteristatus).
Vi lager også en metode som er spesifikk for elbiler, nemlig lading. Elbil-klassen arver alle andre metoder fra klassen Bil, så metodene presenter() og giGass() kan også brukes med Elbil-objekter. Metoden lading() kan imidlertid ikke brukes av Bil-objekter.
Vi kan lage ei liste med både Bil- og Elbil-objekter:
Vi kan skrive ut informasjon om alle bilene med ei for-løkke eller ei for...of-løkke. Les mer om for...of-setninger på nettstedet MDN Web Docs.
Da kjøres presenter()-metoden fra Bil-klassen på alle objektene i lista, som skriver ut bilmerke, modell, farge, toppfart og nåværende fart for alle bilene. Den skriver ikke ut batterikapasitet eller ladestatus for elbilene, siden dette er ikke spesifisert i presenter()-metoden. Hvis vi endrer på presenter()-metoden i Bil-klassen for å ha med dette, vil vi få et problem når vi skal presentere fossildrevne biler, som ikke har denne informasjonen. Løsningen blir å lage en metode i subklassen Elbil, som skriver ut all informasjonen for elbiler.
console
.log(biler[4].presenter);
vil da gi denne utskriften:
Denne bilen er en hvit Tesla Model 3, med en toppfart på 260 km/h og batterikapasitet på 50 kWh. Akkurat nå har den en fart på 0 km/h, og batteriet er ladet 70 %.