|
|
#1 |
|
Участник
|
например
X++: class A { void insert(); } class B extends A class C extends B |
|
|
|
|
#2 |
|
Участник
|
super();
|
|
|
|
|
#3 |
|
Участник
|
вызвав super() из C::insert() я вызову B::insert()
а мне нужен A::insert() |
|
|
|
|
#4 |
|
Участник
|
to Omeo:
PHP код:
С другой стороны, если Вам не нужны свойства класса B, зачем от него наследовать C? Может лучше рассказать первичную задачу. |
|
|
|
|
#5 |
|
Участник
|
потому что нужна вся функциональность B кроме метода insert ( ну и пары других методов )
|
|
|
|
|
#6 |
|
Участник
|
Если переопределен метод на B, то в C его никак нельзя вызвать. Нужно классы проектировать по другому.
|
|
|
|
|
#7 |
|
Участник
|
[Закидано помидорами]
__________________
Здесь могла быть Ваша реклама! |
|
|
|
|
#8 |
|
Участник
|
Так может проще эти пару метов & insert вынести
в отдельный класс и не греть голову ![]() class A - базовый class B - расширение функций class C & D со своими insert-ами |
|
|
|
|
#9 |
|
1C
|
Цитата:
Изначально опубликовано Omeo
вызвав super() из C::insert() я вызову B::insert() а мне нужен A::insert() |
|
|
|
|
#10 |
|
Участник
|
вот именно что в В::insert() выполняются действия которые мне не нужны, а super() там конечно есть
все равно, спасибо всем за помощь
|
|
|
|
|
#11 |
|
Пенсионер
|
Используй флаги - например переменную в классе "А", а в классе "С" устанавливай нужное значение, которое анализируется в классе "В" и направляет свой insert() по нужному тебе пути.
__________________
Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
|
|
|
#12 |
|
Участник
|
Цитата:
Изначально опубликовано Oz
PHP код:
Грубо конечно, но ничего другого в голову не приходит. В методе class A::insertFromA() { insert(); вызовется метод insert ПОТОМКА, то есть класса С но уж никак не А. Если конечно мы говорим об экземпляре(объекте) созданном на основании класса С. 2. Ошибки в синтаксисе. перед вызовом метода необходимо указывать контекст. то есть нужно написать this.insert(); 3. Зачем переопределять метод insertFromA на С если там вызывается просто супер? 4. Если в коде УЖЕ используется вызов метода insert? Вы предлагаете переписать весь код? А если нам нужно использовать этот код не только для экземпляров класса С? Абсолютно бессмысленный пример-совет. Господа. Прежде чем давать советы, сначала может быть проверите то, что советуете сами? А потом уже будете садиться в лужу? |
|
|
|
|
#13 |
|
Участник
|
Цитата:
Изначально опубликовано blokva
Используй флаги - например переменную в классе "А", а в классе "С" устанавливай нужное значение, которое анализируется в классе "В" и направляет свой insert() по нужному тебе пути. Но, к сожалению, придется трогать класс В для целей класса С... что не очень хорошо. :( |
|
|
|
|
#14 |
|
Участник
|
PHP код:
|
|
|
|
|
#15 |
|
Пенсионер
|
Цель определяет средства!
Можешь создать класс "D" наследник "A" но с функциональностью "B" + "C" - "то, что не нужно" из "B"!
__________________
Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
|
|
|
#16 |
|
Участник
|
Приведение по-аксаптовскию Выглядит дико, но работает
PHP код:
|
|
|
|
|
#17 |
|
Участник
|
Цитата:
Изначально опубликовано blokva
Цель определяет средства! Можешь создать класс "D" наследник "A" но с функциональностью "B" + "C" - "то, что не нужно" из "B"! - убрать оттуда перекрытый метод - сделать B наследником X - убрать из B все, кроме перекрытого метода - С наследовать из X |
|
|
|
|
#18 |
|
Дмитрий Ерин
|
Цитата:
Изначально опубликовано Lexey
Приведение по-аксаптовскию Выглядит дико, но работает PHP код:
. Совсем недавно столкнулся...В Вашем примере вызовется метод класса С (то есть рекурсия) и произойдет переполнение стека. ded = this приводит к тому, что дед становится внуком. Это в дебаггере хорошо видно (хоть и странновато). У переменной ded после такого присвоения Type будет указывать по-прежнему на А, но Value покажет new, C. Или я Вас неправильно понял? Так как же все-таки работает приведение (пусть даже дикое)? Остальные предложенные варианты вполне очевидны... Но, интересно, кто-нибудь думал о варианте, когда классы А и В - системные? По-моему, нерешаемо... Кто как думает?
__________________
|
|
|
|
|
#19 |
|
Участник
|
ОК, не работает. Хотя в другую сторону по иерархии все проходит.
Делаем так. PHP код:
PHP код:
|
|
|
|
|
#20 |
|
Участник
|
Цитата:
Но, интересно, кто-нибудь думал о варианте, когда классы А и В - системные?
как ниболее быстрое решение сделал копию В |
|
|