Lecture overview -- Keyboard shortcut: 'u'  Previous page: Forhinding af redefinition -- Keyboard shortcut: 'p'  Next page: Covarians og contravarians -- 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 37 : 41
Forelæsningsnoter i Objekt-orienteret Programmering
Nedarvning
Varians af parametre og returværdi under redefinition

Hvordan kan vi tillade at parametre og returværdi af en metode varierer under redefinition?

En situation hvor klassen B arver A, og hvor T arver fra S. Typerne S og T anvendes som typer i parametre på metoder i hhv. A og B klasserne

   A aref;
   B bref = new B();
   S sref = new S();

   aref = bref;

   aref.meth(sref);

En praktisk anvendelse af klasserne A, B og S som typisk skaber problemer i objekt-orienteret programmering, men ikke i Java

Det er problematisk at overføre et S-objekt som parameter til op i B

Vi kalder operationen op på et objekt af typen B. Dette objekt er refereret gennem en variabel, der er erklæret af (har statisk type A). Ud fra et statisk synspunkt er det derfor OK at overføre et S-objekt til operationskaldet. På grund af dynamisk binding vil vi her antage, at operationen op i klassen B kaldes. Dette er en tidsindstillet bombe, idet op fra B kan kalde en T-operation på sin parameter. Kald af en T-operation på et S-objekt er klart meningsløst. Hvad skal der til for at 'demontere' den tidsindstillede bombe? Et run-time check på, at (i vort tilfælde) x faktisk refererer til et T-objekt. For mange run-time checks gør programmer langsomme. Derfor strør compiler-skrivere ikke om sig med sådanne.