Evo*_*igh 10 java polymorphism static
我对此代码有疑问
public Car {
public static void m1(){
System.out.println("a");
}
public void m2(){
System.out.println("b");
}
}
class Mini extends Car {
public static void m1() {
System.out.println("c");
}
public void m2(){
System.out.println("d");
}
public static void main(String args[]) {
Car c = new Mini();
c.m1();
c.m2();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道多态不适用于静态方法,只适用于实例方法.并且覆盖不适用于静态方法.
因此我认为这个程序应该打印出来:c,d
因为c调用m1方法,但它是静态的,所以它不能覆盖并且它在类Mini而不是Car中调用方法.
它是否正确?
但是,我的教科书说答案应该是:a,d
这是一个错字吗?因为我现在有点困惑.
请清楚这一点,谢谢.
SLa*_*aks 27
因为c调用m1方法,但它是静态的,所以它不能覆盖并且它在类Mini而不是Car中调用方法.
那完全倒退了.
c被宣布为Car通过由,因此静态方法调用c将调用定义的方法Car.
编译器c.m1()直接编译Car.m1(),而不知道c实际持有Mini.
这就是为什么你永远不应该通过这样的实例调用静态方法.