Hoofdstuk 10 Overerving
Voortborduren op eerder gedaan werk Eerste poging: “knip&plak” class Twee { int x, y; int oud ( ) { return x+y; } class Twee { int x, y; int oud ( ) { return x+y; } Drie int z; +1; } int nieuw ( ) { return x+y+z; } versie-management problematiek }
Voortborduren op eerder gedaan werk veel gedoe Tweede poging: “delegeren” class Twee { int x, y; int oud ( ) { return x+y; } class Twee { Twee t; int oud ( ) { return t.oud(); } Drie int z; } int nieuw ( ) { return t.x+t.y+z; } raar asymmetrisch }
Voortborduren op eerder gedaan werk Derde poging: “subklassen” class Twee { int x, y; int oud ( ) { return x+y; } class Twee extends Twee { Drie int z; } int nieuw ( ) { return x+y+z; } }
Subklassen class Ruimte extends Canvas Ruimte is een subklasse van Canvas Canvas is de superklasse van Ruimte Elk Ruimte-object is tevens Canvas-object Een Ruimte-object is een bijzonder geval van een Canvas-object
Over-erving Objecten van een subklasse erven variabelen en methoden van de superklasse Thermo geërfd meter min max zelf gede- clareerd
Superklassen in libraries Applet extends Panel Panel extends Container super- superklasse superklasse
Ge-erfde methodes Applet erft add van klasse Container en nog veel meer...
ondergrond gaat voor motorisatie Klasse-hiërarchie Vervoer middel Voertuig Boot Motor Voertuig Fiets Boot Zeil Vracht Wagen Stoom Boot Auto Motor Fiets ontwerpkeuze: motorfiets is meer motor dan fiets Vliegtuig ontwerpkeuze: ondergrond gaat voor motorisatie
Klasse-hiërarchie “is een” Voertuig Vervoer middel Boot class Voertuig extends Vervoermiddel class Boot extends Vervoermiddel “is een”
Klasse-hiërarchie in AWT Component Button Canvas Label Scrollbar Text Component Container Panel Window Applet Frame Dialog FileDialog a.add(b); TextArea TextField Hallo Applet Container Component Button is een Component Applet is ook een Component (niet zomaar eentje, maar Container, en zelfs Panel)
Klassen vs. Interfaces Klasse: Groep methoden + declaraties Interface: Groep methode-headers “wensenlijstje” dat door een andere klasse moet worden geïmplementeerd
“Interface” in 3 betekenissen Hardware: stekkertjes zijn het “gezicht” van de computer Software: knopjes zijn het “gezicht” van programma “GUI” Programmeren: methoden zijn het “gezicht” van een object class Hallo implements ActionListener {
Interface-hiërarchie in AWT Event Listener Action Listener Adjustment Listener Component Listener Mouse Listener MouseMotion Listener
Klasse-hiërarchie in AWT Event Object AWT Event Action Event Input Event Focus Mouse Key Component Event Adjustment Event
Alles in één hiërarchie Object String Component Event Object Methoden in klasse Object : toString herdefinieerbaar in subklasse clone maakt exacte kopie
Samenvatting Subklassen objecten erven variabelen/methoden van superklassen objecten zijn/kunnen alles wat superklasse-object ook kon subklasse-objecten zijn dus acceptabel waar een superklasse-object nodig is als rechterkant van een toekenning als parameter van een methode