public class OverrideDemo {
public static void main(String[] args) { A pra = new B(); pra.say(); }
}class A {public static void say(){System.out.println("A");}}class B extends A{public static void say(){System.out.println("B");}}
此时的输出结果是:
B
但是,如果是子类类型引用指向子类类型对象时,会发现调用的还是子类的静态方法。
public static void main(String[] args) { B pra = new B(); pra.say(); }
此时的输出结果是:
A
由此可以发现,当被子类的静态方法的签名和被继承的静态方法签名相同时,向上造型后子类对象只能调用父类静态方法,看起来是不符合面向对象的多态属性。
静态方法是属于类的,静态方法无法被覆盖。子类无法覆盖父类方法时,就不属于多态。
例如 A a = new B();可以翻译为,一个A类型引用a指向B类型对象。所以它还是属于父类类型,调用的静态方法也就是父类的。
文章来源: Override(重写)静态方法