Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære OOP-Prinsipper: Arv | Oop
Java OOP
course content

Kursinnhold

Java OOP

Java OOP

1. Hvordan Arbeide med IDE?
2. Oop
3. Interface

book
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

Child.java

copy
123
class 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

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package 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:

  1. Vi oppretter en klasse Bird, som er foreldrekategorien i vårt tilfelle. Denne klassen har egne felter og metoder;

  2. Vi oppretter en klasse Parrot, som bruker extends-nøkkelordet for å arve fra foreldrekategorienBird. Klassen Parrot er en underklasse, og den har egne felter og metoder. I tillegg, som underklasse, arverParrotalle felter og metoder fra foreldrekategorien Bird;

  3. Vi oppretter et objekt av klassen Parrot i main-metoden og ser at vi kan initialisere feltene til bådeforeldrekategorien og underklassen. Først initialiserer vi feltene til foreldrekategorien Bird, deretter initialiserer vi feltene til underklassen Parrot. Deretter kaller vi metodene: først metodene til foreldrekategorien, deretter metoden til underklassen.

Slik 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.

Merk

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. En klasse kan kun ha én forelder;

  • Alt arves unntattprivate-variabler og metoder.

Merk

Du kan ikke arve fra deg selv!

Tidligere nevnte jeg at en underklasse ville ha tilgang til alle variabler og metoder fra foreldrekategorien. Det er imidlertid ikke helt sant.

I realiteten er alle metoder og variabler merket med private-modifikatoren ikke tilgjengelige for underklassen.

  • Overstyr foreldrekategoriens 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 foreldrekategorien.

For å overstyre en metode fra foreldrekategorien, skriver vi @Override over den:

Parrot.java

Parrot.java

copy
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

Bird.java

Parrot.java

Parrot.java

copy
123
public 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 av 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?

question mark

Hvorfor trenger vi arv i Java?

Select the correct answer

question mark

Hvor mange klasser kan vi arve fra samtidig?

Select the correct answer

question mark

Hvordan kan vi forhindre arv i Java?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

Java OOP

Java OOP

1. Hvordan Arbeide med IDE?
2. Oop
3. Interface

book
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

Child.java

copy
123
class 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

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package 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:

  1. Vi oppretter en klasse Bird, som er foreldrekategorien i vårt tilfelle. Denne klassen har egne felter og metoder;

  2. Vi oppretter en klasse Parrot, som bruker extends-nøkkelordet for å arve fra foreldrekategorienBird. Klassen Parrot er en underklasse, og den har egne felter og metoder. I tillegg, som underklasse, arverParrotalle felter og metoder fra foreldrekategorien Bird;

  3. Vi oppretter et objekt av klassen Parrot i main-metoden og ser at vi kan initialisere feltene til bådeforeldrekategorien og underklassen. Først initialiserer vi feltene til foreldrekategorien Bird, deretter initialiserer vi feltene til underklassen Parrot. Deretter kaller vi metodene: først metodene til foreldrekategorien, deretter metoden til underklassen.

Slik 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.

Merk

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. En klasse kan kun ha én forelder;

  • Alt arves unntattprivate-variabler og metoder.

Merk

Du kan ikke arve fra deg selv!

Tidligere nevnte jeg at en underklasse ville ha tilgang til alle variabler og metoder fra foreldrekategorien. Det er imidlertid ikke helt sant.

I realiteten er alle metoder og variabler merket med private-modifikatoren ikke tilgjengelige for underklassen.

  • Overstyr foreldrekategoriens 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 foreldrekategorien.

For å overstyre en metode fra foreldrekategorien, skriver vi @Override over den:

Parrot.java

Parrot.java

copy
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

Bird.java

Parrot.java

Parrot.java

copy
123
public 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 av 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?

question mark

Hvorfor trenger vi arv i Java?

Select the correct answer

question mark

Hvor mange klasser kan vi arve fra samtidig?

Select the correct answer

question mark

Hvordan kan vi forhindre arv i Java?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2
some-alt