Форум 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=180609)

PlutDem 05.06.2012 18:15

Приведение типов
 
Здравствуйте, как в Main вызвать у экземпляра RedBall метод его предка Ball?


Код AS3:

        public class Main extends Sprite {
 
                public var vec:Array = new Array;
 
                public function Main() {
 
                        var ball:RedBall= new RedBall();
 
                        Ball(ball).name(); // выведет RedBall хотя по идее должен Ball
 
 
 
                }
 
 
        }

Код AS3:

public class Ball {
 
                public function Ball() {
 
                }
 
                public function name():void {
 
                        trace("Ball")
                }
        }

Код AS3:

        public class RedBall extends Ball{
 
                public function RedBall() {
 
                }
 
                public override function name():void {
 
                        trace("RedBall")
                }
        }


illuzor 05.06.2012 18:19

Цитата:

Ball(ball).name(); // выведет RedBall хотя по идее должен Ball
Метод переопределён в RedBall
Создайте в Ball метод и не переопределяйте его, тогда можно будет вызвать

PlutDem 05.06.2012 18:25

Я удивился, то потому, что в AS2 сработал бы метод именно Ball т.е. метод типа к которому мы приводим объект. Что бы это обойти там мне пришлось использовать интерфейсы, думал и в AS3 также.

udaaff 05.06.2012 18:31

А можно пример для AS2?

stflasher 05.06.2012 18:53

Сделал так
Добавил в класс RedBall метод name1
Код AS3:

        public class RedBall extends Ball
        {
 
                public function RedBall()
                {
 
                }
                public function name1():void
                {
 
                        super.name()
                }               
 
                public override function name():void
                {
 
                        trace("RedBall");
                }
        }

В классе Main вызывается обычным методом ball.name1()

Код AS3:

        public class Main extends Sprite
        {
 
                public var vec:Array = new Array  ;
 
                public function Main()
                {
 
                        var ball:RedBall= new RedBall();
 
                        ball.name1()
                }
        }


PlutDem 05.06.2012 19:35

udaaff
Увы, дело было давнишние и код утерян. Правда вполне возможно, что такое свойство AS2 я нашел только благодаря кривизне своих рук!:)
stflasher
Не-не-не, так не интересно! Вот если бы можно было вызвать метод из Main не трогая другие классы...

stflasher 05.06.2012 19:40

А зачем так извращаться? Задача была такая "как в Main вызвать у экземпляра RedBall метод его предка Ball?"
Модифицируйте класс RedBall до добавления ещё одного метода и юзайте в Main'e.
Вроде больше никак нельзя.


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

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