多态性和静态方法
我对此代码有疑问
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
。
这就是为什么你永远不应该通过像这样的实例调用静态方法。