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();
.
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();
.