static修饰的方法重写问题

Posted weixingyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static修饰的方法重写问题相关的知识,希望对你有一定的参考价值。

静态的方法不能被重写,他能够被子类重新声明。也就是说在子类中如果有相同名的静态方法,形参列表也相同,此时编译器编译时不报错,但是此时这个子类方法是属于重新声明方法,而不是重写它。此时静态方法是没有多态的。

多态

Shape shape = new Rectangle();

shape.getArea();

 

实际上在运行期的时候调用哪个方法取决于是哪个对象调用他的,规则是优先调用自己的这个getArea方法,如果自己没有这个方法就调用父类的getArea()方法

    例如:

       技术分享图片

       技术分享图片

  改成用static修饰后:

       技术分享图片

        技术分享图片

    

所以说从语义就可以看出static、final、private方法本身都是编译期绑定的(也叫前期绑定)这些方法不存在多态,他们是在还没有运行的时候,程序在编译器里面就知道该调用哪个类的哪个方法了,而其他可观察的普通方法的绑定是在运行的时候根据具体的对象决定的,因为从语义上看这些方法是可被继承的,有了多态而造成了不确定性。

以上是关于static修饰的方法重写问题的主要内容,如果未能解决你的问题,请参考以下文章

八方法的重写

浅析 Java 中的继承和重写

java的方法重写 ,多态和关键字 instanceof和final

07.28 关键字 继承 重写 知识点梳理

Java 重写(Override)与重载(Overload)

重写(override)和重载(overload)的区别