[JAVA] overerving en voids

Pagina: 1
Acties:
  • 232 views sinds 30-01-2008
  • Reageer

  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Ik heb een klasse Spel en een klasse Kaarten en die klasse Kaarten extends Spel.
In die klasse Kaarten staat een void setWaarden.
Hoe krijg ik die void uitgevoerd in de klasse Spel?

Ducati: making mechanics out of riders since 1946


Verwijderd

Werkt dit niet :?
code:
1
2
Kaarten kaarten = new Kaarten();
kaarten.setWaarden();

Maar waarom wil je hem eigelijk vanuit Kaarten aanroepen, en niet vanuit een andere class? Je kan natuurlijk de method setWaarden() ook aan de class Spel toevoegen.

Suc6 :)

Verwijderd

edit: dubbelpost :? :(

Verwijderd

De klasse kaarten erft alle methoden van de klasse spel.
Je kunt dus methoden die in de klasse spel staan ook gebruiken bij instanties van de klasse kaarten.

Wil je de methode setWaarden kunnen gebruiken op een instantie van de klasse spel, dan moet je die methode in de klasse spel zetten. Door middel van overerving kun je setWaarden dan ook in de klasse kaarten gebruiken.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Lees een boek of tutorial zou ik zeggen. Oh ja en als je toch bezig bent, pak ook even de FAQ van got mee.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:25

Janoz

Moderator Devschuur®

!litemod

hmm .. Kaarten een subclass van spel?? Dat mag je me ff uitleggen eigenlijk... Waarom zou een kaart een subclass van spel zijn... Het is wel een onderdeel van een spel, maar geen subclass...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Dan kan ik alle int's etc. gebruiken in de klasse Kaarten

Ducati: making mechanics out of riders since 1946


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 09:30
Volgens mij kan je die void gewoon aanroepen vanuit je subklasse. Je subklasse erft em nml gewoon. Enige probleem wat je evt nog kunt krijgen is dat je em private gemaakt hebt, evenals de variabelen waar de methode op gaat werken. Wil je iets afschermen en toch laten overerver, maak het dan niet private, maar protected

  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op vrijdag 12 oktober 2001 19:28 schreef minne het volgende:
Werkt dit niet :?
code:
1
2
Kaarten kaarten = new Kaarten();
kaarten.setWaarden();

Maar waarom wil je hem eigelijk vanuit Kaarten aanroepen, en niet vanuit een andere class? Je kan natuurlijk de method setWaarden() ook aan de class Spel toevoegen.

Suc6 :)
-------------------------
Nee, dan krijg ik een stackOverFlow error

Ducati: making mechanics out of riders since 1946


Verwijderd

Op vrijdag 12 oktober 2001 20:15 schreef MayaFreak het volgende:
Dan kan ik alle int's etc. gebruiken in de klasse Kaarten
Je moet een aantal get- (en set-) methoden plaatsen in de klasse spel. Op deze manier kun je in alle andere klassen beschikken over waarden die staan in de klasse spel, zonder dat je het subklassen hoeft te maken.
code:
1
2
3
4
public int getAantalSlagen() (voorbeeldje)
{
   return aantalSlagen;
}


Want een subklasse moet een uitbreiding zijn van zijn superklasse. Is dat niet zo, dan ben je fout bezig.

Dus kaart > harten > hartenaas = :)
en spel > kaart = :(

Verwijderd

Op zaterdag 13 oktober 2001 12:30 schreef ptaverne het volgende:

[..]

Want een subklasse moet een uitbreiding zijn van zijn superklasse. Is dat niet zo, dan ben je fout bezig.

Dus kaart > harten > hartenaas = :)
en spel > kaart = :(
umm.... de kaart hartenaas als object geinherit van harten?
nee toch? zeg dat het niet waar is. ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Naar aanleiding van je eerdere topic kan je alleen maar aanraden om eerst eens wat goede stuff door te lezen over het gebruik van inheritance...

Inheritance is niet bedoeld om 'methoden te kunnen gebruiken', maar heeft primair als doel om objecten te verdelen in categorien en de gemeenschappelijke eigenschappen van zo'n categorie op 1 plek te kunnen implementeren en zo dus her te gebruiken.

De mogelijkheid om een methode aan te roepen heeft sowieso helemaal niets te maken het return-type.

Als je de klasse Kaarten hebt die een uitbreiding is van de klasse Spel en de klasse kaarten bevat een methode setWaarden(..) dan is het logisch dat deze methode niet bekend is in de klasse Spel. Het kan namelijk heel goed zo zijn dat je nog een uitbreiding van de klasse Spel schrijft die die methode niet heeft. De methode setWaarden is dus niet een methode van een Spel object, maar van het Kaarten Object.

Als je de methode setWaarden in Spel wilt kunnen gebruiken kan je twee dingen doen:

1. Maak een abstracte methode in Spel en implementeer deze in Kaarten. Merk op dat nu ook alle andere subklassen deze methode moeten implementeren.

2. Gebruik Push-Up Method om deze methode te verplaatsen vanuit Kaarten naar Spel. Uiteraard moet dat wel mogelijk zijn. Als setWaarden Kaarten specifieke functies gebruikt gaat dit feest niet door.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op zaterdag 13 oktober 2001 12:47 schreef mbravenboer het volgende:


Als je de methode setWaarden in Spel wilt kunnen gebruiken kan je twee dingen doen:

1. Maak een abstracte methode in Spel en implementeer deze in Kaarten. Merk op dat nu ook alle andere subklassen deze methode moeten implementeren.

2. Gebruik Push-Up Method om deze methode te verplaatsen vanuit Kaarten naar Spel. Uiteraard moet dat wel mogelijk zijn. Als setWaarden Kaarten specifieke functies gebruikt gaat dit feest niet door.
Kan je me vertellen hoe je dit doet?

Ducati: making mechanics out of riders since 1946


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MayaFreak: Kan je me vertellen hoe je dit doet?
Ja, maar dat is niet erg zinvol. Lees gewoon de documentatie goed door. Een OO-taal (en elke taal in het algemeen) leer je niet door trial-and-error: oh als ik dat nu daar neerzet werkt het wel... Bekijk de inheritance principes, abstracte klassen, interfaces en dergelijke goed. Weet wanneer en op welke manier je inheritance toe past en waarom...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op maandag 15 oktober 2001 12:13 schreef mbravenboer het volgende:

[..]

Ja, maar dat is niet erg zinvol. Lees gewoon de documentatie goed door. Een OO-taal (en elke taal in het algemeen) leer je niet door trial-and-error: oh als ik dat nu daar neerzet werkt het wel... Bekijk de inheritance principes, abstracte klassen, interfaces en dergelijke goed. Weet wanneer en op welke manier je inheritance toe past en waarom...
----------------------
k maar ik moet het morgen af hebben voor school dus.....

Ducati: making mechanics out of riders since 1946


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op maandag 15 oktober 2001 12:16 schreef MayaFreak het volgende:
k maar ik moet het morgen af hebben voor school dus.....
Dus niks. Dan heeft hij alleen nog maar meer gelijk. Voor een schoolopdracht moet je weten waar je mee bezig bent, dat is het hele doel van die opdracht.

Het boeit niet DAT het werkt, het gaat erom dat JIJ begrijpt WAAROM 'ie werkt.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op vrijdag 12 oktober 2001 20:08 schreef Janoz het volgende:
hmm .. Kaarten een subclass van spel?? Dat mag je me ff uitleggen eigenlijk... Waarom zou een kaart een subclass van spel zijn... Het is wel een onderdeel van een spel, maar geen subclass...
ik denk dat het hier niet om de kaarten VAN een spel gaat, maar om een class VOOR kaartspelen (klaverjassen, hartenjagen, u know janozz ;))

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op maandag 15 oktober 2001 12:17 schreef Gerco het volgende:

[..]

Dus niks. Dan heeft hij alleen nog maar meer gelijk. Voor een schoolopdracht moet je weten waar je mee bezig bent, dat is het hele doel van die opdracht.

Het boeit niet DAT het werkt, het gaat erom dat JIJ begrijpt WAAROM 'ie werkt.
Het is niet zo dat het mij niet boeit hoe die het doet, als ie het maar doet. Ik wil het zeker weten hoe het werkt, ik heb alleen heel erg weinig tijd nog. En het programma deed het zoiezo

Ducati: making mechanics out of riders since 1946


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Simpele oplossingen (als je klasse Kaarten nog steeds extends van Spel):

1. Als elk spel een methode setWaarden zou moeten hebben, maar de implementatie verschillend is: maak Spel abstract en voeg een abstracte methode setWaarden toe:
code:
1
2
3
4
abstract class Spel
{
   public abstract void setWaarden(...);
}

Deze methode implementeer je in de klasse Kaarten.

2. Als setWaarden generiek is voor alle spellen: verplaats de methode gewoon uit Kaarten naar Spel.
Denk goed na bij het gebruik van inheritance. Inheritance is niet bedoeld om 'bij methoden te kunnen', maar om bestaande klassen (blauwdrukken voor objecten) te kunnen uitbreiden.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op maandag 15 oktober 2001 12:24 schreef mbravenboer het volgende:
Denk goed na bij het gebruik van inheritance. Inheritance is niet bedoeld om 'bij methoden te kunnen', maar om bestaande klassen (blauwdrukken voor objecten) te kunnen uitbreiden.
Says it all, d8 ik zo :)

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op maandag 15 oktober 2001 12:24 schreef mbravenboer het volgende:

....
[b]Deze methode implementeer je in de klasse Kaarten.[b]
......
oke maar hoe doe je dit nu, dat heb ik nog nie gehad op school

Ducati: making mechanics out of riders since 1946


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MayaFreak: oke maar hoe doe je dit nu, dat heb ik nog nie gehad op school
Simpel zoals je nu al deed:
code:
1
2
3
4
5
6
7
8
9
public abstract class Spel
{
   public abstract void setWaarden(...)
}

public class Kaarten extends Spel
{
   public void setWaarden(...)
}

De methode in kaarten implementeert nu de abstracte methode in de klasse Spel. Je kunt nu geen instanties meer maken van Spel en alle sub-klassen van Spel zullen de methode setWaarden moeten implementeren.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
werkt ook niet
want ik moet in de Applet1 klasse (die Applet extends) een nieuwe Spel declareeren (Spel s = new Spel();)
Hoe werkt die push-up methode?

Ducati: making mechanics out of riders since 1946

Pagina: 1