2015-01-28 2 views
1

Спасибо за всех вас. На самом деле кто-то поместил патч для этого класса, который нарушил правильное поведение. Наконец, я нашел это, проверив загрузчик классов. Простите :)Метод переопределения Java не работает

Здесь public class Son расширяет public class Parent расширяет public class GrandParent

В Родитель, этот метод переопределяет GrandParent:

@Override 
public String getSomething() { 
    return "blabla"; 
} 

В Сына, тот же метод переопределяет Родитель:

@Override 
public String getSomething() { 
    return null; 
} 

Странно, что когда я запускаю getSomething() объявления объекта ed как GrandParent и построенный как Son, он переходит в код родителя и возвращает «blabla» вместо null.

Кто-нибудь видел эту проблему раньше? Может ли кто-нибудь дать объяснение по этому поводу? Благодарю.

+0

Вы уверены, что вы вызываете этот метод для экземпляра Сына? – Eran

+0

Можете ли вы показать нам, как вы их реализуете? класс, реализующий «Parent» –

+0

Да, я уверен, и я ясно вижу, что это сын в DEBUG. – BMWCMW

ответ

3

Если попробовать этот простой код:

public class GrandParent 
{ 
    public String f() { 
     return "grand parent"; 
    } 
} 

public class Parent extends GrandParent 
{ 
    @Override public String f() { 
     return "parent"; 
    } 
} 

public class Son extends Parent 
{ 
    @Override public String f() { 
     return "son"; 
    } 
} 

public class Test 
{ 
    public static void main(String[] args) { 
     GrandParent p = new Son(); 
     System.out.println(p.f()); 
    } 
} 

вы увидите, что печатается строка "son". Вы делаете что-то не так в своем коде.

0

Он должен работать даже с родительским экземпляром проверить:

public class Parent { 
    public String getSomething() 
    { 
     return "parent"; 
    } 
} 

public class Son extends Parent { 

    @Override 
    public String getSomething() { 
     return "son"; 
    } 

    public static void main(String[] args) { 
     Son son = new Son(); 
     System.out.println(son.getSomething()); 
     Parent par = (Parent)son; 
     System.out.println(par.getSomething()); 
    } 
} 

Результат:

son 
son 
Смежные вопросы