Lecture overview -- Keyboard shortcut: 'u'  Previous page: Instantiering og initialisering -- Keyboard shortcut: 'p'  Next page: Grænseflader til klienter og subklasser i forbindelse med nedarvning -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Play sound for this page -- Keyboard shortcut: 'y'  Page 19 : 41
Forelæsningsnoter i Objekt-orienteret Programmering
Nedarvning
Nedarvning og konstruktorer i Java

I direkte forlængelse problematikken identificeret herover ser vi nu på Java's løsning af initialiseringsproblemet. Vi ser også på en række Java eksempler på konstruktorer i de klasser vi introducerede ovenfor.

Konstruktorer nedarves ikke i Java

En Java subklasse's konstruktor er ansvarlig for initialisering af både 'direkte' og nedarvede instansvariable

I forbindelse med initialisering af en subklasse påkalder man sig enten eksplicit eller implicit en superklassekonstruktor

En superklasse konstruktor er ikke direkte meningsfuld for subklassen. Derfor arves den ikke. Men en konstruktor i superklassen løser dog typisk en del af problemet med at initialisere en instans af en subklasse. Derfor vil det altid være tilfældet, at der aktiveres en superklasse konstruktor i forbindelse med initialisering af en subklasse instans. Som det ses nedenfor har vi via super(...) mulighed for at angive hvilken af superklassens konstruktorer vi ønsker anvendt.

Reglen om, at konstruktorer ikke nedarves er typisk for objekt-orienterede sprog. Der er altså ikke blot tale om en 'særhed' i Java

Class B extends A {
  
  instansvariable i B

  public B (parameterListe1){
    super(parameterListe2);
    initialisering af B instansvariable
  }

  ...

}

En skitse der viser hvordan en Java konstruktor i B kalder en konstruktor i superklassen A

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/Bank2.javaKonstruktor i Java klassen CheckKonto som arver fra Konto.

Konstruktor i Java klassen CheckKonto som arver fra Konto.

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/Triple.javaKonstruktor i Java klassen Triple.

Konstruktor i Java klassen Triple.

/user/normark/courses/prog1/prog1-01/sources/java/lister/DoubleCircularList.javaKonststruktorer i Java klassen DoubleLinkable som arver fra Linkable.

Konststruktorer i Java klassen DoubleLinkable som arver fra Linkable.