java中static方法不能被重写但是能重定义

发布时间 2023-05-06 14:36:53作者: 过情关

1、static方法不能被重写

示例1

class Animal{
    public static void walk() {
        System.out.println("Animal的行走方法");
    }
}
class Dog extends Animal{
    public void walk() {
        System.out.println("Dog的行走模式");
    }
    public static void main(String[] args) {
        new Dog().walk();
    }
}

会出现编译错误:java: com.sxhxh.Dog中的walk()无法覆盖com.sxhxh.Animal中的walk()
被覆盖的方法为static

2、static方法可以被重载

示例2

class Animal{
    public static void walk() {
        System.out.println("Animal的行走方法");
    }
}
class Lion extends Animal{
    public void walk(String s) {
        System.out.println("Lion的行走模式" + s);
    }
    public static void main(String[] args) {
        new Lion().walk("冲锋!!");
    }
}

运行结果:
Lion的行走模式冲突!!

3、static方法可以重新定义

示例3

class Animal{
    public static void walk() {
        System.out.println("Animal的行走方法");
    }
}
class Dog extends Animal{
    public static void walk() {
        System.out.println("Dog的行走模式");
    }
    public static void main(String[] args) {
        new Dog().walk();
    }
}

运行结果:Dog的行走模式

如果该代码去掉Dog中walk方法的static的话就变成示例1的情况,则编译不通过,
有static关键字则是在子类中进行该方法的重新定义,编译顺利通过。