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

Aloran 19.02.2010 17:14

переопределение метода родителя
 
Подскажите пожалуйста, возможноли как то при переопределении родителя вызвать метод родителя.родителя, что то типа super.super.metod() (знаю что запись не правильная). И если можно то как?

gloomyBrain 19.02.2010 17:39

super и parent - это разные вещи
переопределение метода - это вообще не отсюда =)

Когда переопределяется родитель - ваш объект встает в новое место в иерархии отображения. Соответственно, его parent меняется. Значит, мы можем обратиться к this.parent и вызвать его некий метод (или к this.parent.parent...parent... и так сколько нужно)
Отследить переопределение родителя можно по событию Event.ADDED

про super
Вот есть у Вас класс, который наследуется от MovieClip
Что это значит?
Это значит, что объект Вашего класса будет обладать всеми свойствами и методами класса MovieClip И свойствами и методами, которые Вы описали в Вашем классе
И когда пишем super.addChild(...) - это то же самое, что написать this.addChild(...)
Вернее говоря, то же самое до тех пор, пока вы не переопределите метод addChild() в классе наследнике.
Если вы его переопределите, то он может делать вообще что-нибудь другое, например удалять ребенка вместо его добавления на сцену. В таком случае - this.addChild() и super.addChild() будут делать разные вещи. Во всех остальных - то есть нет переопределения метода - это одно и то же и можно писать и так и так, как Вам удобнее

Aloran 19.02.2010 18:06

Все это я знаю и так))) Спасибо за напоминание. Наверное я просто некорректно задал вопрос.

У меня есть класс А с методом metod(). У класса А есть наследник класс В с переопределенным metod(). Так же есть класс С который расширяет В. Так вот мне надо в классе С переопределить metod(), но при этом вызвать в начале super.metod(); класса А, а не класса В. Не спрашивайте зачем))) надо.
Возможно ли так сделать.

dixus 19.02.2010 18:13

Напрямую его вызвать не удасться, но можно исхитриться, например поставив флаг на исполнение содержимого метода в классе B.

gloomyBrain 20.02.2010 17:11

Просто сделать в классе В вот такой метод
Код AS3:

public function superAMethod():void {
  super.method();
}



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

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