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