Override(重写)静态方法

匿名 (未验证) 提交于 2019-12-03 00:22:01



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类型对象。所以它还是属于父类类型,调用的静态方法也就是父类的。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!