Lecture overview -- Keyboard shortcut: 'u'  Previous page: Grænseflader til klienter og subklasser i forbindelse med nedarvning -- Keyboard shortcut: 'p'  Next page: Forhindring af nedarvning i Java -- 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 21 : 41
Forelæsningsnoter i Objekt-orienteret Programmering
Nedarvning
Nedarvning og synlighed i Java

Som allerede nævnt i tidligere lektioner har java en 'visibility modifier' som hedder protected. Det er denne modifier som er central i forbindelse med nedarvning

Der er behov for at offentliggøre egenskaber fra superklasse til subklasse i Java

Det er for snævert hvis disse er 'private' i superklassen

Det er for bredt hvis disse gøres 'public' i superklassen

En protected variabel eller metode i en klasse A kan ses i subklasser af A

Protectede egenskaber er også synlige fra klasser i samme pakke som A.

Som en mellemting mellem 'private' og 'public' indfører vi nu protectede egenskaber af en Java klasse. Grundtanken er, at protectede egenskaber i en klasse kan ses direkte subklasser af klassen. I Java gælder endvidere, at protectede egenskaber også kan ses direkte fra alle andre klasser i samme pakke. Protectede egenskaber har altså også pakke synlighed

Uden for A's pakke kan protectede egenskaber ses i objekter, der statisk er kvalificerede med mindst subklassen af A. Denne regel er omtalt nærmere i Java Tutorial samt i appendix F af Lewis and Loftus

  • Ændringer af synlighed under nedarvning:

    • Java tillader at gøre egenskaber 'mere offentlig' under nedarvning

    • Java forbyder at gøre egenskaber 'mere privat' under nedarvning

    • Superklassens erklæringer om synlighed kan ikke strammes i en subklasse

At Java tillader at gøre egenskaber mere offentlige betyder, at private egenskaber kan erklæres protected eller public i subklassen, og at protectede egenskaber kan erklæres public i subklassen

At Java forbyder at gøre egenskaber mere private betyder i praksis, at protectede egenskaber ikke må gøres private, og at offentlige egenskaber ikke må gøres protectede eller private i en subklasse

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/Bank2.javaProtectede instansvariable i Java klassen Konto.

Protectede instansvariable i Java klassen Konto.

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/Pair.javaProtectede instansvariable i Java klassen Pair.

Protectede instansvariable i Java klassen Pair.

/user/normark/courses/prog1/prog1-01/sources/java/lister/CircularList1.javaJava klassen Linkable uden protectede instansvariable.

Java klassen Linkable uden protectede instansvariable. Instansvariablene tilgås i dette eksempel udelukkende via de direkte definerede metoder i Linkable. Bemærk, at disse metoder kan kaldes fra metoder i DoubleLinkable såfremt metoderne ikke er private.