PDA

Просмотр полной версии : Вызов переопределенного метода класса


nyctota
09.01.2008, 12:41
Есть классы (для примера приведены совершенно бесполезные):

class A {
public static function init()
{
trace("A --> init");
A.invokeMe();
}
private static function invokeMe()
{
trace("A --> invokeMe()");
}
}

и расширяющий его

class B extends A {
public static function init()
{
trace("B --> init");
B.invokeMe();
}
private static function invokeMe()
{
trace("B --> invokeMe()");
}
}


Если вызвать метод init() класса B, то почему-то вызывается метод invokeMe() надкласса, то есть:

B.init();

выдает trace:

B --> init
A --> invokeMe()


При этом замечено, что если в классе B вызывать метод invokeMe() без конкретного указания класса, то все происходит как должно быть.

В растерянности =/ Разъясните ситуацию, пожалуйста.

etc
09.01.2008, 13:03
Глюк компилятора, если классы переписать заново, то все работает.

nyctota
09.01.2008, 13:14
Ээээ... просто взять создать новый файл, скопировать туда код класса (кстати говоря, обоих, или достаточно подкласса?) и все?

Или ручками переписать? Радостная новость: класс-то чуток побольше, чем тут представлен.

UPDATE: вроде переписал — не помогло =/

iNils
09.01.2008, 18:48
Да, глюк имеет место быть.
Поменял порядок описания методов в B c

init
invokeMe

на

invokeMe
init

Помогло.

nyctota
19.01.2008, 02:58
Подтверждаю. Мистика, но помогает. Спасибо.