NAVIGATIE

Freetime overzicht
Zoeken


  RUBRIEKEN

FAQ / Help
Wat mag niet?
WZL Wedstrijden
WZL Chat
WZL Toolbar
WZL Statistieken
WZL leden
WZL shop
E-cards

RSS

Fun-feed
Babe-feed
Stud-feed

Een groot aantal pokerrooms geven de mogelijkheid om poker te spelen op internet en geld te storten via het veilige iDeal betaalsysteem.
Overzicht » Computer » Programmeren » Java: klassen en objecten
Onderaan pagina
Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T: 19 R: 715
23/3/2008 - 17:29u | Quote
Ik zit met een vreemd probleem wat betreft klassen en objecten... Het zit zo:

Ik heb 3 klassen, laten we zeggen klasse a, b, c.
Klasse a maakt een object van klasse b
Klasse c wilt de methodes in klasse b aanroepen door het object van a te gebruiken.


Code:

Klasse A
----------
klasseB objectje = new klasseB(); // object maken van klasse B
int result = objectje.telOp(2,3); // een methode in klasse B gebruiken


Klasse B
----------
int optelling;
public void telOp(int getal1, int getal2)
{
optelling = getal1 + getal2;
}

public int geefAntwoord()
{
return optelling;
}


Klasse C
----------
// hier in klasseC wil ik dus de methode geefAntwoord uit klasseB gebruiken voor objectje uit klasseA
protected klasseA a;
int resultaat = a.objectje.geefAntwoord();


Resultaat: niets! Hoe kan dit? De compiler klaagt ni en ik dacht toch dat dit de juiste manier van werken was?
dannyboy 3.329
wzl-lid
Sinds 31/5/2005
T:108 - R:883
23/3/2008 - 19:37u | Quote
dat komt doordat je in klassec wel een instantie van klassea declareert, maar die code die erin staat wordt dan nog nniet uitgevoerd.
ook is die 2de regel code van klassea niet echt proper. ik zal eveen proberen een oplossing te maken.
dannyboy 3.329
wzl-lid
Sinds 31/5/2005
T:108 - R:883
23/3/2008 - 19:42u | Quote
Code:

Klasse A
----------

public class KlasseA {

KlasseB objectje;

public KlasseA() {
objectje = new KlasseB(); // object maken van klasse B
objectje.telOp(2,3); // een methode in klasse B gebruiken
}

}


Klasse B
----------
public class KlasseB {

int optelling;

public void telOp(int getal1, int getal2) {
optelling = getal1 + getal2;
}

public int geefAntwoord() {
return optelling;
}
}

Klasse C
----------

public class KlasseC {

public static void main(String[] args) {
KlasseA a = new KlasseA();
int resultaat = a.objectje.geefAntwoord();
}
}




Dit zou moeten werken

edit: ik heb de belangerijke code int vet gezet. Als je het vetgedrukte in KlasseC uitvoert zal de vetgedrukte method in KlasseA worden uitgevoerd. Die methode is een speciale method die de constructor noemt en wordt uitgevoerd als '= new ...()' uitvoert.

Laatst aangepast door dannyboy op 23/03/2008 19:47:45u (3x aangepast)
dannyboy 3.329
wzl-lid
Sinds 31/5/2005
T:108 - R:883
23/3/2008 - 19:49u | Quote
zoals je ziet doen we ergens ook 'new KlasseB()' en toch is er in KlasseB niet zo'n constructor als in KlasseA. In dat geval gebruikt java de default constructor en dat is te vergelijken als een method met geen parameters en geen code in.
naftebak 3.341
WZL-lid
Sinds 8/6/2003
T:9 - R:1047
23/3/2008 - 22:25u | Quote
Bondt ge hebt blijkbaar nog altijd geen cursus objectgericht programmeren gevolgd?
dannyboy 3.329
wzl-lid
Sinds 31/5/2005
T:108 - R:883
23/3/2008 - 23:15u | Quote
dat zou idd veel helpen...
Zubzub 2.604
wzl-lid
Sinds 30/7/2005
T:2 - R:176
24/3/2008 - 0:37u | Quote
yup, geen resultaat omdat ge de telop methode nog niet hebt aangeroepe. dannyboy lost het op door het in de constructor van a te zette. Je kan ook gewoon de telopmethode appart aanroepe en dan de geefresultaat. maar geefresultaat zonder de optelmethode eerst uit te voeren zal, vrij logisch, geen resultaat opleveren

dus in c kan je doen
a.objectje.telop(2,3);
int resultaat = a.objectje.geefresultaat();


Protected en direct variable access (=a.objectje) worden trouwens aangenomen als bad programmer practice Gebruik settters en getters voor het geven en setten van variabelen en probeer protected te vermijden (hoewel het niet verboden is natuurlijk).

En ja volg es een deftige cursus OO programmeren

Laatst aangepast door Zubzub op 24/03/2008 0:40:29u (1x aangepast)
Bondt met dt
[mod] 007 ½
Sinds 2/5/2003
T:19 - R:715
24/3/2008 - 3:31u | Quote
Even een kleine vermelding: het voorbeeld van hierboven is een uit de duim gezogen stuk code, dus wat betreft de werking en aanroepvolgorde van methodes hoeft er geen aandacht aan besteed te worden Ik werk met getters en setters en de kwestie 'protected' al dan niet gebruiken, daar heb ik al verschillende meningen over gehoord. De een vindt het wel nodig, de ander niet. Ik heb toevallig gekozen om het wel te doen

Hetgeen ik dus in concreto vergeten ben is het toevoegen van KlasseA a = new KlasseA(); in de klasseC

Muchas gracias
 
Bovenaan pagina