1 van 1

Abstracte klassen

Geplaatst: za 19 jan 2008, 22:39
door Scofield
Zou iemand mij kunnen uitleggen wat een abstracte klasse in Java is? Ik snap niet echt het nut van zo'n klasse.

Alvast bedankt,

Re: Abstracte klassen

Geplaatst: za 19 jan 2008, 22:44
door EvilBro

Re: Abstracte klassen

Geplaatst: za 19 jan 2008, 22:51
door Scofield
Ik vind de uitleg nogal moeilijk....

Re: Abstracte klassen

Geplaatst: za 19 jan 2008, 23:36
door EvilBro
Stel je maakt een programma om je garage op te ruimen. In je garage staan fietsen en koelkasten. Voor deze twee objecten maak je klassen aan. Beide klassen hebben een methode om te berekenen of ze op een bepaalde plek in de garage passen. Bovendien houdt elke klasse bij wat het gewicht is van de fiets of koelkast waarbij deze hoort en heeft een methode om dit gewicht uit te lezen.

Nu kom je na enig nadenken tot de conclusie dat het je eigenlijk niet kan schelen of je met een fiets of een koelkast te maken hebt. Je wilt gewoon je garage opruimen en daarvoor hoef je alleen maar te weten of het object dat je hebt past op een bepaalde plek. Je besluit een algemene klasse te maken die een willekeurig object representeert en je maakt hier subklasses van voor een fiets en een koelkast. Zo kun je vrolijk met objecten werken zonder dat je hoeft te weten wat het object eigenlijk is.

Stel nu dat je deze object klasse NIET abstract maakt. Om met dit object om te kunnen gaan zonder te weten wat het eigenlijk is, zal ook dit object methodes moeten hebben voor de berekening of er plek is en wat het gewicht is. Je zal dus een implementatie moeten schrijven voor deze methodes. Dit is voor de gewichtsmethode geen probleem. Deze methode werkt voor alle soorten objecten hetzelfde. De plek-berekenmethode daarentegen is voor elk soort object uniek. Hij zal bij een algemeen object (de hoofdklasse) nooit zinnig gebruikt kunnen worden. Elke subklasse zal deze methode dan ook altijd overschrijven. Je hebt dus een methode geimplementeerd die nooit gebruikt gaat worden (valt eigenlijk wel mee, want je laat hem natuurlijk leeg, maar goed). Daarbij komt nog eens dat een algemeen object helemaal niet mag bestaan. Je kunt er niks zinnigs mee. Het is echter met een gewone klasse geen enkel probleem om toch algemene objecten te maken.

Op het moment dat we nu de klasse abstract maken, is het niet meer mogelijk om objecten te maken van deze klasse. Dit is mooi want we hadden net geconstateerd dat dit toch niet iets zinnigs opleverde. Als we nu de plek-berekenmethode ook abstract maken hoeven we hem niet meer te implementeren. Bovendien is het hierdoor verplicht geworden om in een subklasse deze methode te maken (dit is een verschil met een gewone klasse waarbij de subklasse de methode van zijn hoofdklasse kan gebruiken). Dit voorkomt dus dat iemand vergeet de methode te implementeren.

Ik hoop dat dit wat licht op de zaak doet schijnen...

Re: Abstracte klassen

Geplaatst: zo 20 jan 2008, 00:09
door Scofield
Als k het goed voorheb bedoede je het volgende:

Je maakt eigenlijk een klasse die hoger in de hiƫrarchie staat. Deze bevat de 2 subklassen. Nu blijkt dat een methode, nl. de plek-berekenmethode niet zinvol is aangezien deze voor de twee subklasse verchillend is. Hierop wordt de klasse abstract gemaakt, wat blijkbaar wil zeggen dat er geen objecten kunnen aangemaakt worden van deze klassen. Dit is goed angezien de plek-berekenmethode voor de beide subklassen verschillend was. Nu maken we de plek-berekenmethode abstract waardoor we die plek-berekenmethode moeten declareren in beide subklassen (wat goed is, aangezien het een verschillende berekening is).

Volgens mij is dan het grote nut van zo'n abstracte klasse, het laatste wat je zei, nl. dat de subklasse de methode van zijn hoofdklasse niet kan gebruiken.

Heel hard bedankt voor je uitleg,