static方法可以覆盖吗,不能!

您所在的位置:网站首页 static可以重写吗 static方法可以覆盖吗,不能!

static方法可以覆盖吗,不能!

2023-10-08 08:02| 来源: 网络整理| 查看: 265

首先,static方法是可以继承的,父类中的static方法,子类也可以调用。 其次,子类中允许定义和父类static方法同名并且参数类型和个数都一致的static方法,并且子类对象在调用时,使用的是子类自身的。例如:

public class Son extends Father{ static void print(){ System.out.println("son"); } public static void main(String[] args) { Son son=new Son(); son.print(); } } class Father { static void print() { System.out.println("father"); } }

该程序结果显示为“son",代表了son对象调用的print方法是Son类自身的,可能在这里看起来和方法覆盖一样,再来做个实验

Father son=new Son(); son.print();

此时,运行程序结果为”father",这意味着此时的son对象调用的print方法是Father类的,表示print方法是静态绑定。

总结:static方法,子类可以继承,也可以定义一个一模一样的方法,调用时是调用自身的。但是并不能称之为覆盖,方法覆盖是在java继承和多态的机制下实现的,而当我们将子类对象转换为父类时再次调用static方法,发现该对象调用的变为了父类自身的。这意味着static方法不能实现动态绑定,它是静态绑定的。满足不了java多态的定义,不能称之为覆盖。类似的,final、private的方法也都是静态绑定,二者一个不能重写,一个不能继承。

关于动态绑定可以参考我另一篇:子类转为超类对象后,发生的成员方法以及成员变量的相关调用



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3