Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   вызвать функцию дочернего класса (http://www.flasher.ru/forum/showthread.php?t=178078)

heartless 14.04.2012 16:41

вызвать функцию дочернего класса
 
вообщем есть первый класс

Код AS3:

 
        public class SpriteExt extends Sprite
        {
 
                public function SpriteExt(myAttr:Object = null)
                {
                        if (this.stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                protected function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        trace('deleted');
                }
 
        }

и второй, его сын

Код AS3:

 
        public class MainMenu extends SpriteExt {
 
                public function MainMenu(myAttr:Object = null) {
                        super(myAttr);
                }
 
                override private function init()
                {
                        trace('inited');
                        super();
                }
 
        }

хочу чтобы при добавлении на сцену любого из детей SpriteExt вызывалась функция init() того класса, который сообственно создался, а не init() самого родителя SpriteExt.
Тоесть output в данном случае выглядит так:
deleted
А хотелось бы
inited
deleted

in4core 14.04.2012 16:59

Код AS3:

public class SuperClass extends Sprite{
 
  public function SuperClass()  { super(); }
  public function init():void { trace('superClass'); }
}
 
public class Extended extends SuperClass {
 
public function Extended() { super(); }
override public function init():void { trace('child of superClass') , super.init() }
}
 
Main.as
 
var child:Extended = new Extended();
child.init() // child of superClass , superClass


Zebestov 14.04.2012 17:10

Автор хочет все наоборот. А так не получится.

Wolsh 14.04.2012 17:31

В смысле как это не получится?
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class SpriteExt extends Sprite
        {
                public function SpriteExt(myAttr:Object = null)
                {
                        if (this.stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                protected function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        trace('deleted');
                }
        }
}

Код AS3:

package  
{
        import flash.events.Event;
        public class MainMenu extends SpriteExt
        {
 
                public function MainMenu(myAttr:Object = null)
                {
                        super(myAttr);
                }
 
                override protected function init(e:Event = null):void
                {
                        trace('inited');
                        super.init(e);
                }
        }
}


Zebestov 14.04.2012 18:31

Хм... я просто запутался в условии задачи. Мне показалось, что нужно из экземпляра родительского класса каким-то чудом уметь вызывать методы будущих классов, расширяющих данный.

heartless 14.04.2012 18:38

да, спасибо Wolsh'у, все работает


Часовой пояс GMT +4, время: 16:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.