Subklassar og arv
Nokre gonger har vi behov for å ha fleire variantar av eit objekt. I klassen Bil, som vi oppretta i artikkelen "Objekt og klassar", vil vi kanskje òg legge til moglegheita for å legge inn elbilar, og då treng vi gjerne litt meir informasjon, som batterikapasitet og batteristatus. Desse objektvariablane vil ikkje vere relevante for fossildrivne bilar. Då kan vi lage ein annan variant av klassen Bil, som vi kallar Elbil. Denne klassen kan ha alle dei same objektvariablane og metodane som klassen Bil, men vil i tillegg ha sine eigne objektvariablar og metodar. Vi kan opprette denne nye klassen som ein subklasse av klassen Bil, slik:
Vi kan sjå at Elbil er ein subklasse av Bil ved å sjå på den første linja, der det står class
Elbil
extends
Bil
. Dette betyr at Elbil er ei utviding av Bil. I første linje i konstruktøren hentar vi objektvariablane frå superklassen Bil, før vi set objektvariablane som er spesifikke for Elbil (batterikapasitet og batteristatus).
Vi lagar òg ein metode som er spesifikk for elbilar, nemleg lading. Elbil-klassen arvar alle andre metodar frå klassen Bil, så metodane presenter() og giGass() kan òg brukast med Elbil-objekt. Metoden lading() kan likevel ikkje brukast av Bil-objekt.
Vi kan lage ei liste med både Bil- og Elbil-objekt:
Vi kan skrive ut informasjon om alle bilane med ei for-lykkje eller ei for...of-lykkje. Les meir om for...of-setningar på nettstaden MDN Web Docs.
Då blir presenter()-metoden køyrd frå Bil-klassen på alle objekta i lista, som skriv ut bilmerke, modell, farge, toppfart og noverande fart for alle bilane. Han skriv ikkje ut batterikapasitet eller ladestatus for elbilane, sidan dette er ikkje spesifisert i presenter()-metoden. Dersom vi endrar på presenter()-metoden i Bil-klassen for å ha med dette, vil vi få eit problem når vi skal presentere fossildrivne bilar, som ikkje har denne informasjonen. Løysinga blir å lage ein metode i subklassen Elbil, som skriv ut all informasjonen for elbilar.
console
.log(bilar[4].presenter);
vil då gi denne utskrifta:
Denne bilen er ein kvit Tesla Model 3, med ein toppfart på 260 km/h og batterikapasitet på 50 kWh. Akkurat no har han ein fart på 0 km/h, og batteriet er lada 70 %.