Archief - Kleine vraagjes thread

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

devilution.be

Legacy Member
Hey :)

Ik heb een simpel vraagje over Java, mss zijn er nog mensen die met kleine vragen zitten, dan kunnen ze eventueel allemaal in deze thread staan.

Vraag:

KlasseX x = new KlasseY();

KlasseX extends KlasseY

Is x een instantie van KlasseX of van KlasseY (voert hij eerst de Y constructor uit en dan de X constructor ? )

forloRn_

Legacy Member
devilution.be zei:
Hey :)
KlasseX x = new KlasseY();

KlasseX extends KlasseY

Is x een instantie van KlasseX of van KlasseY (voert hij eerst de Y constructor uit en dan de X constructor ? )

Dat gaat niet compileren. Het moet zijn: KlasseY extends KlasseX. En in principe is new KlasseY() dan een instantie van beide.

De constructor van een base class wordt uitgevoerd vóór die van de derived. Je kunt dat toch gemakkelijk checken door no-arg constructors te schrijven met een print statement?

devilution.be

Legacy Member
Ah merci je hebt me de info gegeven die ik nodig heb ^^

Mijn voorbeeld was fout.

Het moest zijn :

KlasseY x = new KlasseX()

KlasseX extends KlasseY.

Als je dan een methode oproept die in beide klassen staan, maar elk hun eigen output hebben, gaat hij dan beide outputs weergeven of enkel 1 van de twee. En wat ik eigenlijk wil weten, is waarom juist. Ik kan het zelf uitvoeren en zien wat het doet, maar dan weet ik nog altijd niet waarom :) Ik wil het goed snappen.

Bedankt alvast.

forloRn_

Legacy Member
Je gaat maar de output zien van één van beide klassen, en welke dat is, hangt af van het daadwerkelijke type van het object at runtime. Dat is gewoon een techniek die ze in het OO-wereldje polymorfisme of dynamic binding of nog wat anders noemen.

Code:
class Y {
	public void f() { System.out.println("Y"); }
}

class X extends Y {
	public void f() { System.out.println("X"); }
}

Y y = new Y();
X x = new X();
Y uhoh = new X(); // elke X is een Y

y.f(); // print "Y"
x.f(); // print "X"
uhoh.f(); // print ook "X"

Wat er voor de naam van de variabelen y, x en uhoh staat is het type at compile time. Hetgeen je daadwerkelijk instantieert met de constructors is het echte type (het type at runtime).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan