Lecture overview -- Keyboard shortcut: 'u'  Previous page: Metode redefinition og -kombination [Section] -- Keyboard shortcut: 'p'  Next page: Forhinding af redefinition -- 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 35 : 41
Forelæsningsnoter i Objekt-orienteret Programmering
Nedarvning
Redefinition af metoder og variable

Når man laver en subklasse er der ofte behov for at redefinere egenskaber fra superklassen. I Java gøres dette simpelthen ved at definere egenskaber i subklassen, som har samme navne eller signaturer, som egenskaberne i superklassen

En subklasse har ofte behov for at definere en variant af en metode, som arves fra superklassen

En metode eller variabel i en klasse B siges at være redefineret hvis der findes en metode eller variabel af samme navn i B's superklasse

I subklassen af en klasse kan vi overskrive superklassens egenskaber. På denne måde kan vi - i forbindelse med nedarvning og dannelsen af en subklasse - redefinere allerede eksiterende egenskaber

  • Redefinition i Java, hvor klassen B arver fra A:

    • En redefineret variabel i B er til stede i både en B version og en A version i instanser af klassen B

      • A versionen kan tilgås internt fra B objektet gennem brug af super

    • En redefineret metode i B er stadig til stede i klassen A

      • A versionen af metoden kan tilgås internt fra B gennem brug af super

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/RedefTry.javaEt kunstigt program som illustrerer redefinition af variable og metoder, og dynamisk binding af metoder.

Et kunstigt program som illustrerer redefinition af variable og metoder, og dynamisk binding af metoder. Vi skaber et B objekt, aB, hvortil der sendes beskeden m(7). På grund af dynamisk binding kaldes B's m metode, som assigner v i B til 7. Metoden m i A kaldes dernæst med 7-3=4 som parameter. Som følge af dette bliver v i A assignet til 4. Objektet aB printes, hvilket forårsager at this.v (i B) og super.v (i A) udskrives. Programmet's output bliver:
  B: this.v = 7, super.v = 4

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/RedefTry2.javaEn let ændring af ovenstående som illustrerer at redefinerede variable bindes statisk.

En let ændring af ovenstående som illustrerer at redefinerede variable bindes statisk. Variablen v findes i både A og B klassen. Vi aflæser v gennem aB1 og aB2 variablene. Dette kan vi gøre da v variablene i A og B er protectede, og dermed også klasse- synlige. Den første er erklæret af typen A, den anden af typen B. Udskriften er 'Variablen v gennem A kvalificeret variabel: 5. Variablen v gennem B kvalificeret variabel: 6'. Vi ser altså at der ikke udnyttes dynamisk binding ved tilgang af variable, men derimod statisk binding.

Findes der regler for hvordan returværdi og metodeparametre må variere under redefinition?

Vi ser på denne generelle problemstilling på næste side