2015-09-20 3 views
0
public class a{ 
    public void sup() 
    { 
    System.out.println("1"); 
    } 
public class b extends a 
{ 
    public void sub 
{ 
     System.out.println("2"); 
} 

Когда я создаю экземпляр объекта, как это и запустить его:полиморфизм вопросы Java

a ob1 = new b(); 
ob1.sub(); 

Там будет ошибка компиляции, что говорит метод суб() в OB1 не определен. Если я хочу создать экземпляр объекта класса «a», и он все равно может использовать метод в классе b. Каким образом это можно сделать?

+1

'sup' vs' sub'. У вас есть опечатка. Почини это. –

+2

Это * актуальный * код, который вы используете? Вам не хватает парсеров на 'sub'. – Makoto

+0

Используйте «супер» ключевое слово https://docs.oracle.com/javase/tutorial/java/IandI/super.html , но будьте осторожны относительно принципа замещения Барбары Лисков http://www.oodesign.com/liskov-s- подстановка-principle.html – wildloop

ответ

0

Если у вас есть объявление A ob1 = ..., вы можете использовать только методы и поля класса A. Это связано с тем, что ob1 объявлен как ссылка типа A. Эта проверка выполняется во время компиляции, и фактический тип времени выполнения ob1 не имеет значения.

Если вы знаете что ob1 на самом деле ссылается на объект типа B (как это делается в данном случае), и вы хотите, чтобы он объявлен как A, но использовать его в качестве B, вы можете привести его к B:

((B) ob1).sub(); 
Смежные вопросы