|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
ветеран форума
|
Наследование, как вызвать метод любого из предков?
Есть базовый класс A, далее класс B наследует класс А, и так же есть класс С наследует класс B.
Класс А содержит метод someMethod(), класс B его переопределяет, С тоже переопределяет. собственно нужно при переопределении в С вызывать супер метод не B, а А /*псевдокод*/ 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("Остановите Землю, я сойду!!!"); |
|
|||||
ветеран форума
|
Цитата:
Вопрос пока чисто теоретический.
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
(super as A).someMethod(); - так не прокатит? (я не пробовал)
|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
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(); // и еще какой то код } } |
|
|||||
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Я бы тоже избежал подобного применения . А теоритически можно придумать много фантастических и интересных вещей )
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
ТС, я бы на вашем месте использовал параметр по умолчанию, для иммитации перегрузки:
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, время: 07:05. |
|
« Предыдущая тема | Следующая тема » |
|
|