所以我知道在 Java 中,当你有一个静态方法时,你应该使用格式调用它,ClassName.method()
而不是使用与实例方法相同的结构,即:
ClassName myObject = new ClassName();
myObject.method();
但是,如果您这样做,它仍然是有效的代码并且可以工作。假设我决定在所讨论的方法是静态的情况下执行此操作,并具有以下设置:
public SuperClass {
public static int foo(int x) {
return x;
}
}
public SubClass extends SuperClass {
public static int foo(int x) { // Overriding foo() in SuperClass
return x + 1;
}
}
public MyDriver {
public static void main(String[] args) {
SuperClass myObject = new SubClass(); // Upcasting.
System.out.println(myObject.foo(5)); // This should polymorphically print 6
}
}
然而,屏幕上打印出来的是 5 而不是 6。为什么?