我在这里有关于此代码的问题
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被 声明 为Car,因此静态方法调用由通过c将调用定义的方法Car。 编译器c.m1()直接编译为Car.m1(),而不知道c实际包含Mini。
c
Car
c.m1()
Car.m1()
Mini
这就是为什么您永远不要通过这样的实例调用静态方法的原因。