OOP-Prinsipper Arv
Arv
La oss se nærmere på prinsippet om OOP – arv.
Arv er en mekanisme som gjør det mulig å opprette klasser basert på en annen klasse.
- Klassen som fungerer som grunnlag kalles forelder eller superklasse;
- Klassen som opprettes basert på foreldreklassen kalles barn, subklasse eller etterkommer.
Dermed kan barneklassen arve egenskaper og attributter fra en annen klasse – foreldreklassen (dens metoder og variabler).
Du kan arve en klasse ved å bruke nøkkelordet extends. Syntaksen for en barneklasse som arver fra en forelderklasse ser slik ut:
Child.java
123class Child extends Parent { // properties and methods }
La oss se på et eksempel på hvordan arv fungerer i kode. Vi har en klasse Bird med bestemte felter og metoder, og det finnes en klasse Parrot med sine egne felter og metoder. En papegøye er en fugl, så logisk sett bør papegøyen arve fra Bird-klassen:
Her er koden fra skjermbildet, omskrevet for bedre lesbarhet og klarhet:
Bird.java
Parrot.java
Main.java
12345678910111213141516171819package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
La oss forstå hva som skjer i disse illustrasjonene:
- Vi oppretter en klasse
Bird, som er foreldrerklassen i dette tilfellet. Denne klassen har egne felter og metoder; - Vi oppretter en klasse
Parrot, som brukerextends-nøkkelordet for å arve fra foreldrerklassenBird. KlassenParroter en barneklasse, og den har egne felter og metoder. I tillegg, som barneklasse, arverParrotalle feltene og metodene til foreldrerklassenBird; - Vi oppretter et objekt av klassen
Parrotimain-metoden og ser at vi kan initialisere feltene til både foreldrerklassen og barneklassen. Først initialiserer vi feltene til foreldrerklassenBird, deretter initialiserer vi feltene til barneklassenParrot. Deretter kaller vi metodene: først metodene til foreldrerklassen, og så metoden til barneklassen.
Dermed brukte vi arv for å arve klassen Bird.
Hvorfor gjør vi dette?
Når vi har mange ulike underklasser av Bird, ikke bare Parrot, for eksempel også Pigeon og Penguin, vil vi få mange dupliserte felter, som boolean canFly. Det første arv hjelper med, er å unngå dupliserte kodefragmenter.
Videre forbedrer det lesbarheten betydelig. I praksis møter du sjelden klassen Bird og dens underklasser direkte, men arv brukes ofte, spesielt sammen med grensesnitt.
Note
Du vil lære om grensesnitt i neste del av dette kurset.
Regler for arv
-
Arv kun én klasse. Java støtter ikke multippel arv. Én klasse kan kun ha én forelder;
-
Alt arves unntatt
privatevariabler og metoder.
Note
Du kan ikke arve fra deg selv!
Tidligere nevnte jeg at en underklasse vil ha tilgang til alle variabler og metoder fra forelderen. Dette er imidlertid ikke helt sant.
I realiteten er alle metoder og variabler merket med private-modifikatoren ikke tilgjengelige for underklassen.
- Overstyr foreldrerklassens metode.
La oss tenke oss at vi arver en klasse, men det er visse deler av den arvede koden vi ikke liker. Anta at vi ønsker at en bestemt metode skal fungere annerledes enn i foreldrerklassen.
For å overstyre en metode fra foreldrerklassen, skriver vi @Override over den:
Parrot.java
1234@Override public void eat() { System.out.println("The parrot is eating"); }
I koden ovenfor har vi overstyrt metoden til foreldreklassen, og nå vil den overstyrte metoden bli kalt når denne metoden kalles fra barneklassen!
- Forhindre arv.
Hvis du ikke ønsker at noen skal arve klassen din, bruk final-modifikatoren foran den.
For eksempel:
Bird.java
Parrot.java
123public final class Bird { // fields and methods }
På denne måten, ved å bruke nøkkelordet final, har vi forbudt arv av Bird-klassen.
Dette er bare de grunnleggende reglene og egenskapene ved arv. Det er et omfattende tema, og du vil bruke det svært ofte. Gjennom kurset vil du bli kjent med andre aspekter ved arv og bruke dem oftere.
1. Hvorfor trenger vi arv i Java?
2. Hvor mange klasser kan vi arve fra samtidig?
3. Hvordan kan vi forhindre arv i Java?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4.76
OOP-Prinsipper Arv
Sveip for å vise menyen
Arv
La oss se nærmere på prinsippet om OOP – arv.
Arv er en mekanisme som gjør det mulig å opprette klasser basert på en annen klasse.
- Klassen som fungerer som grunnlag kalles forelder eller superklasse;
- Klassen som opprettes basert på foreldreklassen kalles barn, subklasse eller etterkommer.
Dermed kan barneklassen arve egenskaper og attributter fra en annen klasse – foreldreklassen (dens metoder og variabler).
Du kan arve en klasse ved å bruke nøkkelordet extends. Syntaksen for en barneklasse som arver fra en forelderklasse ser slik ut:
Child.java
123class Child extends Parent { // properties and methods }
La oss se på et eksempel på hvordan arv fungerer i kode. Vi har en klasse Bird med bestemte felter og metoder, og det finnes en klasse Parrot med sine egne felter og metoder. En papegøye er en fugl, så logisk sett bør papegøyen arve fra Bird-klassen:
Her er koden fra skjermbildet, omskrevet for bedre lesbarhet og klarhet:
Bird.java
Parrot.java
Main.java
12345678910111213141516171819package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
La oss forstå hva som skjer i disse illustrasjonene:
- Vi oppretter en klasse
Bird, som er foreldrerklassen i dette tilfellet. Denne klassen har egne felter og metoder; - Vi oppretter en klasse
Parrot, som brukerextends-nøkkelordet for å arve fra foreldrerklassenBird. KlassenParroter en barneklasse, og den har egne felter og metoder. I tillegg, som barneklasse, arverParrotalle feltene og metodene til foreldrerklassenBird; - Vi oppretter et objekt av klassen
Parrotimain-metoden og ser at vi kan initialisere feltene til både foreldrerklassen og barneklassen. Først initialiserer vi feltene til foreldrerklassenBird, deretter initialiserer vi feltene til barneklassenParrot. Deretter kaller vi metodene: først metodene til foreldrerklassen, og så metoden til barneklassen.
Dermed brukte vi arv for å arve klassen Bird.
Hvorfor gjør vi dette?
Når vi har mange ulike underklasser av Bird, ikke bare Parrot, for eksempel også Pigeon og Penguin, vil vi få mange dupliserte felter, som boolean canFly. Det første arv hjelper med, er å unngå dupliserte kodefragmenter.
Videre forbedrer det lesbarheten betydelig. I praksis møter du sjelden klassen Bird og dens underklasser direkte, men arv brukes ofte, spesielt sammen med grensesnitt.
Note
Du vil lære om grensesnitt i neste del av dette kurset.
Regler for arv
-
Arv kun én klasse. Java støtter ikke multippel arv. Én klasse kan kun ha én forelder;
-
Alt arves unntatt
privatevariabler og metoder.
Note
Du kan ikke arve fra deg selv!
Tidligere nevnte jeg at en underklasse vil ha tilgang til alle variabler og metoder fra forelderen. Dette er imidlertid ikke helt sant.
I realiteten er alle metoder og variabler merket med private-modifikatoren ikke tilgjengelige for underklassen.
- Overstyr foreldrerklassens metode.
La oss tenke oss at vi arver en klasse, men det er visse deler av den arvede koden vi ikke liker. Anta at vi ønsker at en bestemt metode skal fungere annerledes enn i foreldrerklassen.
For å overstyre en metode fra foreldrerklassen, skriver vi @Override over den:
Parrot.java
1234@Override public void eat() { System.out.println("The parrot is eating"); }
I koden ovenfor har vi overstyrt metoden til foreldreklassen, og nå vil den overstyrte metoden bli kalt når denne metoden kalles fra barneklassen!
- Forhindre arv.
Hvis du ikke ønsker at noen skal arve klassen din, bruk final-modifikatoren foran den.
For eksempel:
Bird.java
Parrot.java
123public final class Bird { // fields and methods }
På denne måten, ved å bruke nøkkelordet final, har vi forbudt arv av Bird-klassen.
Dette er bare de grunnleggende reglene og egenskapene ved arv. Det er et omfattende tema, og du vil bruke det svært ofte. Gjennom kurset vil du bli kjent med andre aspekter ved arv og bruke dem oftere.
1. Hvorfor trenger vi arv i Java?
2. Hvor mange klasser kan vi arve fra samtidig?
3. Hvordan kan vi forhindre arv i Java?
Takk for tilbakemeldingene dine!