Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[AS3] Inheritance van constructor?

Pagina: 1
Acties:

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Ik wil een aantal classes maken met dezelfde constructor. Dit was mijn idee:

stage:
Flash ActionScript 3:
1
var b:B = new B("foo");


B.as:
Flash ActionScript 3:
1
2
3
4
5
package {
  public class B extends A {

  }
}


A.as:
Flash ActionScript 3:
1
2
3
4
5
6
7
package {
  public class A {
    public function A(par):void {
      trace(par);
    }
  }
}


...maar dat mag niet omdat de parser op zoek gaat naar een constructor functie in B ipv A. Ik zou natuurlijk een soort 'doorgeefluik constructorfunctie' in B kunnen zetten, maar dat lijkt omslachtig. Is hier een keyword voor ofzo?

TabCinema : NiftySplit


  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
http://www.kirupa.com/forum/showthread.php?t=275077
Constructors are special, basically. Also, because ActionScript doesn't support method overloading, you wouldn't be able to have more than one constructor anyway. So, if you inherited a constructor, you wouldn't be able to define a new constructor for your child class because you would have to match the method signature exactly.
Wat ik hieruit opmaak is dat elke class een constructor moet hebben. Je zou wel eens naar de functie super() kunnen kijken. Zie onderstaand voorbeeld.

A.as:
code:
1
2
3
4
5
6
7
package {
    public class A {
        public function A (s:String):void {
            trace('A -> ' + s);
        }
    }
}


B.as:
code:
1
2
3
4
5
6
7
8
package {
    public class B extends A {
        public function B (s:String):void {
            trace('B -> ' + s);
            super(s);
        }
    }
}


Zie ook: http://livedocs.adobe.com...fV3/statements.html#super

Bla


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:49

Bosmonster

*zucht*

Het idee van objecten met dezelfde constructor is inderdaad om die van de parent aan te roepen. In AS blijkbaar met super().

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Super! :P

Dit werkt naar behoren. Toch vraag ik me af wat het nut hiervan is... als je toch een functie call moet doen kun je net zo goed een user-defined 'init' functie in de base class gooien.

Bedankt iig :)

TabCinema : NiftySplit


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:49

Bosmonster

*zucht*

Bozozo schreef op dinsdag 29 april 2008 @ 10:32:
Super! :P

Dit werkt naar behoren. Toch vraag ik me af wat het nut hiervan is... als je toch een functie call moet doen kun je net zo goed een user-defined 'init' functie in de base class gooien.

Bedankt iig :)
Omdat je zo zeker weet dat iets uitgevoerd wordt als er een instantie wordt aangemaakt. Het kan namelijk heel goed voorkomen dat niet jij, maar iemand anders met je code werkt ;)

Daarnaast scheelt het gewoon een aanroep en kun je direct iets doen met argumenten meegegeven met het aanmaken van de instantie. Het is onzinnig daar een losse 'init' call tussen te gooien als het ook automatisch kan natuurlijk :)

[ Voor 18% gewijzigd door Bosmonster op 29-04-2008 10:50 ]