PDA

Volledige versie bekijken : toegang tot variabelen van een superclass


jawel
%Europe/Berlin %845 %2007, 21:17
Hoi, vraagje- is er een mogelijkheid om de variabelen van een superclass in een subclass aan te roepen zonder gebruik te maken van 'extends' of 'implements'?

Dauntless
%Europe/Berlin %875 %2007, 22:01
Heel vage vraag... De keywords extends (voor een classs)s en implements (voor een interface) gebruik je enkel bij de class definition en zo ontstaat de superclass - subclass relatie.

Als je dan een variabele aanroept die gedefinieerd is in je superclass en niet in je subclasss, zal flash automatisch de variabele van de superclass gebruiken. Als je dat toch specifiek wilt aangeven (of je subclass heeft een bepaalde methode overschreven), kan je dat doen met het 'super' keyword:
super.move();

package
{
public class Dog extends Animal
{
function Dog()
{

}

function howl()
{
trace("Dog.howl()");
}

override public function breathe()
{
super.move();
trace("Dog.breathe()");
}

override public function move()
{
trace("Dog.move()");
}
}
}
package
{
class Animal
{
function Animal()
{
}

public function move()
{
trace("Animal.move()");
}

function eat()
{
trace("Animal.eat()");
}

public function breathe()
{
trace("Animal.breathe()");
}
}

}

jawel
%Europe/Berlin %995 %2007, 00:53
Haha sorry daar heb je gelijk in. Wat ik wil, is in een bepaalde class in een package variabelen definieren, en daar in een andere class in die package gebruik van maken ZONDER dat ik alle methods van die 'spook'-superclass moet definieren. Ik heb nu zo een structuur:

package com.blog {
public class Weblog {
internal var items:Items;
internal var tijdlijn:Tijdlijn;

public function Weblog () {
items = new Items();
tijdlijn = new Tijdlijn();
}
}
}

En dan moet je in tijdlijn bij items kunnen en vice versa. Is dat mogelijk zonder de hele tijd die methods dubbel te moeten definieren? Ik wil dus zeg maar niet de methods erven maar alleen dat de variabele items toegankelijk is voor tijdlijn en andersom.

Dauntless
%Europe/Berlin %000 %2007, 01:00
En als je werkt met een referentie van Weblog naar tijdlijn en vice versa?

Dan maak je een getItems(); method aan in de Weblog classs en die kan je dan oproepen vanuit de Tijdlijn class.

jawel
%Europe/Berlin %002 %2007, 01:04
En als je werkt met een referentie van Weblog naar tijdlijn en vice versa?

Dan maak je een getItems(); method aan in de Weblog classs en die kan je dan oproepen vanuit de Tijdlijn class.

ah dus dan zoiets in de class Weblog:

public function getItems():Items {
return items;
}
?

en hoe roep je die dan aan vanuit de Tijdlijn class?

(btw erg bedankt voor je reaktie :) )

Dauntless
%Europe/Berlin %007 %2007, 01:11
Jup.

package com.blog {
public class Weblog {
internal var items:Items;
internal var tijdlijn:Tijdlijn;

public function Weblog () {
items = new Items();
tijdlijn = new Tijdlijn(this);
}
public function getItems():Items
{
return this.items;
}
}
}


package com.blog
{
public class Tijdlijn
{
private var _blog:Weblog;
public function Tijdlijn(p_parent:Weblog)
{
this._blog = p_parent;
trace(this._blog.getITems());
}
}
}

Zo ongeveer :).

jawel
%Europe/Berlin %014 %2007, 01:20
merci :) daar moet het mee lukken

Steeltje
%Europe/Berlin %298 %2007, 08:09
@ Dauntless, heb je een reden dat je een public function "getItems" gebruikt i.p.v een getter als public function get Items () : Items { return this._items}; ?

Dauntless
%Europe/Berlin %425 %2007, 11:13
Persoonlijke oorkeur :).

Let wel op dat jouw code niet zou werken: Gebruik 'Items' niet als naam van de get functie want dat is ook al een classe naam.

Steeltje
%Europe/Berlin %503 %2007, 13:05
Klopt id, had niet gelet op de classname. persoonlijk zou ik voor de getter gaan :)