Toon posts:

[flash as2] uitlezen van static var via method in superclass

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een superclass met een hele reeks subclasses. Al die subclasses hebben een static property die ik ook bij instances wil kunnen uitlezen. Als versimpeld voorbeeld heb ik de class Box en zijn subclass BoxSubclass:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
class boxes.Box {
    public static var staticProp:String = "static prop in Box";
}

class boxes.BoxSubclass extends boxes.Box {
    public static var staticProp:String = "static prop in BoxSubclass";
    
    public function getStaticProp():String {
        return(staticProp);
    }
}

ik wil de static propery staticProp van BoxSubclass dus kunnen uitlezen bij zijn instances:
Flash ActionScript:
1
2
var boxsub:BoxSubclass = new BoxSubclass();
trace("boxsub.getStaticProp(): "+boxsub.getStaticProp());

deze levert netjes de gewenste property op. Ik heb nu alleen precies dezelfde method nodig in alle subclasses, en dat vind ik niet erg efficient. Het lijkt dan logisch die method naar de superclass te verplaatsen:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
class boxes.Box {
    public static var staticProp:String = "static prop in Box";
    
    public function getStaticProp():String {
        return(staticProp);
    }
}

class boxes.BoxSubclass extends boxes.Box {
    public static var staticProp:String = "static prop in BoxSubclass";
}

alleen wanneer ik dan die method op de subclass aanroep (op precies identieke wijze als in het eerste geval), krijg ik de static property terug van de superclass, en niet die van de subclass. Als ik de static property in de subclass niet opnieuw declareer, maar een andere waarde geef in de constructor functie, krijg ik wel de property van de subclass terug:
Flash ActionScript:
1
2
3
4
5
class boxes.BoxSubclass extends boxes.Box {
    public function BoxSubclass() {
        staticProp = "static prop in BoxSubclass";
    }
}

Mijn probleem is zo dus eigenlijk opgelost, maar kan iemand me uitleggen waar dat verschil vandaan komt? En wat ik ook niet begrijp, is waarom ik nu met
Flash ActionScript:
1
trace(BoxSubclass.staticProp);

toch van de subclass de staticProp de juiste waarde terugkrijg; ik dacht namelijk dat de constructor functie alleen maar werd aangeroepen wanneer je een instantie aanmaakt van een class?

[ Voor 7% gewijzigd door Verwijderd op 11-11-2006 15:30 ]


Verwijderd

Topicstarter
topic.kick();