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

关于动态绑定可以参考我另一篇:https://blog.csdn.net/qq_41286138/article/details/104614683

发布了8 篇原创文章 · 获赞 2 · 访问量 641

猜你喜欢

转载自blog.csdn.net/qq_41286138/article/details/104619145