Java:将 Object 用作​​超级 class(为什么给定的语句不起作用以及如何修复它?)

Java: Using Object as a super class (why a given statement is not working and how to fix it?)

Java 问题:谁能告诉我为什么声明 obj.f1();下面不起作用 以及如何解决?提前致谢。

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?

    }

}

假设这是 java,因为您没有这样标记它:

您似乎觉得 java 是动态类型检查,但实际上它是静态类型检查。这意味着由于您已将 obj 声明为类型 Object,编译器将拒绝您的代码,因为 Object 没有方法 f1()

编译器不关心您将其初始化为什么,local/field 的声明类型(前面的那个)决定了可以对其调用什么。

要解决此问题,您需要将 obj 声明为 Y,如下所示:Y obj = new Y();.