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

首先,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的方法也都是静态绑定,二者一个不能重写,一个不能继承。

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

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值