Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.03.2012, 00:07
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 1  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию Наследование, как вызвать метод любого из предков?

Есть базовый класс A, далее класс B наследует класс А, и так же есть класс С наследует класс B.
Класс А содержит метод someMethod(), класс B его переопределяет, С тоже переопределяет.

собственно нужно при переопределении в С вызывать супер метод не B, а А
/*псевдокод*/
Код AS3:
class A {
    public function someMethod():void {
        // код
    }
}
 
class B extends A {
    override public function someMethod():void {
        super.someMethod();
        // и еще какой то код
    }
}
 
class C extends B {
    override public function someMethod():void {
        //какой то код
 
        // и вот тут нужен фокус типа super.super.someMethod();
 
        // и еще какой то код
    }
}
Ну в в теории как вызывать методы любого потомка? Если это вообще возможно без хаков и изворотов.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 23.03.2012, 00:11
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 2  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
У вас что-то не так с архитектурой и идеологией. Так не делают. Легальными и простыми способами это невозможно.
__________________
:)

Старый 23.03.2012, 00:17
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 3  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
У вас что-то не так с архитектурой и идеологией. Так не делают. Легальными и простыми способами это невозможно.
Попрошу без таких комментов, о "тру ООП" понятие имею, и холиварить сейчас нет желания на тему что такое "хорошо" и что такое "плохо"....

Вопрос пока чисто теоретический.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 23.03.2012, 00:36
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 4  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
(super as A).someMethod(); - так не прокатит? (я не пробовал)

Старый 23.03.2012, 00:51
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
class A {
    public function someMethod():void {
        // код
    }
}
 
class B extends A {
    override public function someMethod():void {
        super.someMethod();
        // и еще какой то код
    }
 
    final protected function $someMethod():void {
        super.someMethod();
    }
}
 
class C extends B {
    override public function someMethod():void {
        //какой то код
 
        // и вот тут нужен фокус типа super.super.someMethod();
 		super.$someMethod();
        // и еще какой то код
    }
}

Старый 23.03.2012, 03:53
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Я имел в виду то, что если есть уже скомпиленная иерархия классов, например в swc или просто родная, то метод пра-предка напрямую вызвать не удастся никак.
__________________
:)

Старый 23.03.2012, 05:07
Vishapakahr вне форума Посмотреть профиль Отправить личное сообщение для Vishapakahr Найти все сообщения от Vishapakahr
  № 7  
Ответить с цитированием
Vishapakahr

Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
Я бы тоже избежал подобного применения . А теоритически можно придумать много фантастических и интересных вещей )
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !!

Старый 27.03.2012, 02:41
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 8  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
ТС, я бы на вашем месте использовал параметр по умолчанию, для иммитации перегрузки:

Код AS3:
class A {
    public function someMethod(isParent:Boolean=null):void {
        // код
    }
}
 
class B extends A {
    override public function someMethod(isParent:Boolean=null):void {
        super.someMethod(isParent);
 
        if (isParent) {
            // и еще какой то код
        }
    }
}
 
class C extends B {
    override public function someMethod(isParent:Boolean=null):void {
        //какой то код
 
        // и вот тут нужен фокус типа super.super.someMethod();
        // - да пожалуйста, вызываем метод класса A
        super.someMethod();
 
        // а так вызываем метод класса B
        super.someMethod(true);
    }
}
__________________
adobe AS3 manual

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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