2015-10-13 4 views
-1

Вопрос Java: Может кто-нибудь, пожалуйста, скажите мне, почему утверждение obj.f1(); ниже не работает и как его исправить? Заранее спасибо.Java: Использование объекта в качестве суперкласса (почему данный оператор не работает и как его исправить?)

class X{ 
    void f1() { 
     System.out.println("XXX") ; 
    } 
} 

class Y extends X { 
    void f1(){ 
     System.out.println("YYY"); 
    } 
}  



public class Test { 


    public static void main(String[] args) { 

     Object obj = new Y(); 
     obj.f1(); // why this does not work? 

    } 

} 
+0

Если я правильно понял, что это Java, добавьте тег java через кнопку редактирования под своим сообщением. – AlphaModder

+0

Да, это Java. – Mariav

ответ

0

Предполагая, что это Java, как вы не отметили его как таковой:

Вы, кажется, под впечатлением, что Java динамически типа проверены, в то время как в действительности это статически. Это означает, что, поскольку вы объявили obj как тип Object, компилятор отклоняет ваш код, потому что Object не имеет метода f1().

Компилятор не заботится о том, для чего вы его инициализировали, адельный тип локального/поля (тот, что впереди) определяет, что можно вызвать на нем.

Чтобы исправить это, вам необходимо объявить obj как Y, например: Y obj = new Y();.

+0

Спасибо, что ответили на мой вопрос. – Mariav

+0

@Mariav Нет проблем. Если бы мое решение помогло, я был бы признателен, если бы вы приняли его, нажав на галочку, чтобы он остался. :) – AlphaModder

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

  • Нет связанных вопросов^_^