De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.

Verwante presentaties


Presentatie over: "Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2."— Transcript van de presentatie:

1 Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2

2 Wat is overerving? Overerving: uit een bestaande klasse (superklasse, basisklasse) leidt je een andere klasse (subklasse) af Deze afgeleide klasse beschikt over alle eigenschappen (variabelen en methoden) van de basisklasse en eigenschappen van zichzelf

3 Hoe kun je overerving herkennen? Tussen de subklasse en de superklasse bestaat een is-een relatie Een rechthoek is een vierhoek Een parallellogram is een vierhoek Een paard is een zoogdier Een fiets is een voertuig Een auto is een voertuig

4 Superklasse/subklasse Voertuig is algemener Voertuig is een superklasse Fiets en Auto zijn speciale vormen van voertuigen Fiets is een subklasse van Voertuig auto is een subklasse van Voertuig 4

5 Overerving OVERERVING SUPERKLASSE SUBKLASSE A SUBKLASSE BSUBKLASSE C

6 Overerving Superklasse Subklassen Klasse Rechthoek erft van klasse Vierhoek Klasse Parallellogram erft ook van Vierhoek

7 Subklasse van een subklasse

8 Overerving in Java Subklasse erft alle methoden en attributen, niet de constructoren class Parallellogram extends Vierhoek class Rechthoek extends Vierhoek

9 Eenvoudig voorbeeld class Rechthoek { protected int breedte = 200, hoogte = 100; void print() { // print een rechthoek mbv kruisjes } class FlexRechtHoek extends Rechthoek { void breder() { breedte++; } void hoger() { hoogte++; } }

10 Eenvoudig voorbeeld private variabelen van een superklasse (breedte en hoogte) moeten protected worden als er in de subklassen methoden zijn die deze variabelen gebruiken

11 Eenvoudig voorbeeld Rechthoek r = new Rechthoek(); FlexRechtHoek fr = new FlexRechtHoek(); r.print(); fr.print(); fr.breder(); fr.hoger();

12 Eenvoudig voorbeeld Rechthoek r = new Rechthoek(); FlexRechtHoek fr = new FlexRechtHoek(); r.print(); fr.print(); fr.breder(); fr.hoger(); Wat kan niet? r.breder(); r.hoger();

13 Overriding Stel je hebt een methode print() in een superklasse Elke subklasse erft automatisch deze methode Maar als je wilt kunt je de methode print() opnieuw definiëren in de subklasse Dit heet overriding De geërfde methode wordt overschreven door de nieuwe definitie 13

14 Voorbeeld Superklasse Rechthoek heeft een methode print() De methode zet een rechthoek (van variabele breedte en hoogte) met behulp van kruisjes op het scherm: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 14

15 Voorbeeld Subklasse FlexRechthoek Deze heeft een ook methode print() Deze methode zet een rechthoek (van variabele breedte en hoogte) op het scherm met behulp van een zelfgekozen symbool: 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 15

16 De subklasse class FlexRechthoek extends Rechthoek { private String symbool; Flexrechthoek(int ho,int br, String symbool) { super( ho. br ); this.symbool = symbool; } void print() {// overriding // print een rechthoek mbv symbool }

17 super() Let op de aanroep van de constructor van de superklasse in de constructor van de subklasse FlexRechthoek(int ho,int br, String symbool { super( ho, br ); this.symbool = symbool; } 17

18 Voorbeeld overriding private Rechthoek r; private FlexRechthoek fr; //... r = new Rechthoek( 70, 30 ); fr = new FlexRechthoek( 70, 30, "5" ); //... r.print(); // printmethode uit klasse Rechthoek fr.print(); // printmethode uit klasse FlexRechthoek

19 Overriding In de subklasse toch de methode van de superklasse aanroepen kan door super.naamVanDeMethode(parameters) public void print() { if( … ) super.print(); // … } 19

20 Overriding Bij overriding hebben de methoden in de super-en subklasse dezelfde naam Ze hebben hetzelfde aantal parameters die in dezelfde volgorde staan en die van hetzelfde type zijn 20

21 Overloading Bij overloading hebben methoden in dezelfde klasse dezelfde naam, maar een ander aantal parameters, of parameters van een ander type Zodanig dat bij een aanroep de compiler weet welke van de twee methoden je bedoelt 21

22 Dynamische binding class Rechthoek { protected int breedte, hoogte; // … void print() { // … } class FlexRechthoek extends Rechthoek { private String symbool; // … void print() {// overriding // … } 22

23 Dynamische binding Bij RechtHoek en FlexRechtHoek is sprake van overerving En ze hebben allebei een methode die print() heet Er is dus sprake van overriding Overriding, en dus overerving, is een voorwaarde voor dynamische binding 23

24 Statisch en dynamisch type Elke instantie van FlexRechtHoek heeft niet een, maar twee typen Een FlexRechtHoek is een RechtHoek Dat betekent dat je kunt declareren: RechtHoek rh = new FlexRechtHoek( 30,40 ); Wat is dan het type van rh? Het statische type is RechtHoek Het dynamische type is FlexRechtHoek 24

25 Dynamische binding Wat gebeurt er bij de opdracht rh.print();? Wordt print() van RechtHoek aangeroepen of print() van FlexRechtHoek? Bij overriding wordt de methode print() van het dynamische type gebruikt Dat heet dynamische binding In dit geval wordt dus print() van FlexRechtHoek gebruikt 25

26 Dynamische binding Dynamische binding lijkt vrij subtiel en onschuldig Maar heeft belangrijke gevolgen En maakt het leven van de programmeur een stuk aangenamer Je hoeft immers in de code niet uit te zoeken wat het precieze type van een object is Want het Javasysteem weet in runtime wat het precieze, dynamische type is 26

27 Dynamische binding Een toepassing daarvan vind je in het voorbeeld van de Bank, met de superklasse Rekening en twee subklassen Bankrekening en Spaarrekening Dynamische binding wordt nog krachtiger door het gebruik van zogeheten interfaces Deze komen in hoofdstuk 9 aan bod 27

28 Klasselid Attributen of methoden heten ook wel klasseleden of class members 28

29 29 Einde


Download ppt "Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2."

Verwante presentaties


Ads door Google