多态性和静态方法

我对此代码有疑问

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

我知道多态不适用于静态方法,只适用于实例方法。 并且覆盖不适用于静态方法。

因此我认为这个程序应该打印出来:c,d

因为c调用m1方法,但它是静态的,所以它不能覆盖它并且它在类Mini而不是Car中调用方法。

它是否正确?

但是,我的教科书说答案应该是:a,d

这是一个错字吗? 因为我现在有点困惑。

请清楚这一点,谢谢。

因为c调用m1方法,但它是静态的,所以它不能覆盖它并且它在类Mini而不是Car中调用方法。

这完全倒退了。

c 声明Car ,因此通过c进行的静态方法调用将调用Car定义的方法。
编译器直接将Car.m1()编译为Car.m1() ,而不知道c实际上持有Mini

这就是为什么你永远不应该通过像这样的实例调用静态方法。