Wat doet "abstract" nou eigenlijk?

Status
Niet open voor verdere reacties.

Evilsin

Gebruiker
Lid geworden
11 nov 2009
Berichten
18
Hallo allemaal,

Ik ben op het moment bezig met het leren van Java, en ben tegen een functionaliteit van overerving aangelopen die ik niet helemaal begrijp.
Het gaat over Abstracte classes en methoden. Ik snap niet helemaal waarvoor je deze nou eigenlijk gebruikt, en wat deze doen.

Zou iemand mij misschien een uitleg kunnen geven wat het doel van abstract is, en in welke situaties je dit het beste kan gebruiken?

alvast bedankt!
 
Laatst bewerkt:
Een abstracte klasse daar kan je geen object van maken, wel kan je hem "extenden".

Lees; http://nl.wikipedia.org/wiki/Abstracte_klasse voor meer info



Bijv, je maakt een programma over honden.

Dan kan je een ABSTRACTE klasse "hond" hebben.
en bijv een classe "poedel" en "bulldog"

Wat je nu wilt doen is in hond alle standaardmethodes zetten (loop, blaf, kijk, enz, enz).

Je kunt dan echter niet doen Hond myHond = new Hond();
want het is een abstracte klasse.

Wat je wel kunt doen is de classe poedel en bulldog laten erven (extenden) van hond.
zoals:

public class poedel extends hond {

en dan hier de methodes.

}



PS: dit voorbeeld hierboven is slechts een voorbeeld, ik zeg niet dat je voor elke hond een aparte klasse zou moeten gaan maken in een ECHT programma.
 
Laatst bewerkt:
ok, bedankt voor het voorbeeld. maar waarom zou je de class hond abstract willen maken? je kan toch ook gewoon over-erven als deze class niet abstract is?
 
Dat klopt wat je schrijft, maar ik zie het zo: Wellicht wil je afdwingen dat er eerst een concretere/completere subclass komt en dat díe gebruikt wordt bij instantiatie.
Oftewel: Stel dat Fikkie een poedel is, dan wil je wellicht niet hebben dat Fikkie = new Hond (dat is véél te algemeen/abstract) maar dat bij de instantiatie een overervende class wordt gebruikt die concreter/completer beschrijft wat een poedel is. Dus dat (met Poedel geprogrammeerd als subclass van Hond) Fikkie = new Poedel wel mag.

Misschien was Dier of Katachtige als abstracte class een beter voorbeeld geweest: Je wilt een Cheetah die je als King wilt aanduiden ook niet als King = new Dier of King = new Katachtige laten instantiëren, alhoewel dat (zéér in het algemeen) wel klopt met de werkelijkheid maar King niet (voldoende) beschrijft.

Tijs.
 
Laatst bewerkt:
je kan toch ook gewoon over-erven als deze class niet abstract is?

Wat dntles zegt: door een class abstract te maken voorkom je dat er een object van die class gemaqakt kan worden.

Ik heb bijvoorbeeld classes die toegang bieden tot een database. Ik heb er een voor PostgreSQL en een voor MySQL. Beide classes hebben bepaalde properties en methods gemeen (omdat je sommige dingen in beide databases op dezelfde manier kunt doen), dus is het logisch om die functies in een moeder-class te zetten en beide subclasses daarop te extenden. Maar, ik wil absoluut niet dat iemand ooit gaat proberen om die direct met die moederclass te werken (want die bevat alleen een paar algemene methods en properties) dus maak ik die abstract.

En zo kun je ook methods abstract maken en zo afdwingen dat de class die extend de method zelf implementeert. In mijn abstracte database moeder-class is de connect() method abstract dus als ik de MySQL class erop laat extenden dan zal PHP direct klagen dat ik in de MySQL subclass de connect() method moet aanmaken.

Als je in je eentje programmeert dan lijkt het alsof dit allemaal over bodige onzin is, maar als je in een groepje werkt dan is het erg prettig dat PHP je vertelt dat je een class moet extenden en dat je methods bent vergeten te implementeren, zonder dat je hoeft na te vragen bij de programmeur die de bewuste class heeft geschreven.
 
Ok hartstikke bedankt voor de duidelijke uitleg. Ik snap hem nu
 
Je hebt twee mogelijkheden
een abstract class kan ook interface(kontract hoe iets eruit moet zien) zijn
een abstracte class volgt niet noodzakelijk de geimplementeerde interfaces (hierdoor kan je geen new (instantie) aanmaken omdat het object niet alle eigenschappen bezit die hij zou moeten hebben).
waarbij indien je afleid ervan je die wel dient te implementeren indien die niet abstract is

abstracte class kan ook een upperclass zijn die stukken die gemeenschappelijk zijn voor meerdere functionaliteiten(overerver's) kan laten gebruiken en het dan niet zelf moeten doen.

nu moet je goed bekijken dat je bij java indien je papa aanduid, geen tweede papa kan hebben dus niet van meerdere klassen kan extenden maar wel meerdere implements kan hebben (het zegt gewoon ik kan dit ook , de afhandeling moet je zelf doen in de class)

let op interface kan ook als parameter aangeduid worden (betekend alles wat dit kan mag je aanbieden)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan