我可以在Java中重写和重载静态方法吗?

2022-08-31 10:28:05

我想知道:

  1. 为什么静态方法不能在Java中被覆盖?
  2. 静态方法可以在Java中重载吗?

答案 1

静态方法不能在确切的意义上被覆盖,但它们可以隐藏父静态方法

在实践中,这意味着编译器将决定在编译时执行哪个方法,而不是在运行时执行,就像它使用重写的实例方法一样。

有关整洁的示例,请查看此处

这是Java文档,解释了重写实例方法和隐藏类(静态)方法之间的区别。

重写:在Java中重写仅意味着特定方法将基于对象的运行时类型而不是其编译时类型(覆盖的静态方法就是这种情况)来调用

隐藏:静态的父类方法不是子类的一部分(尽管它们是可访问的),因此不存在重写它的问题。即使在子类中添加另一个静态方法(与其父类中的静态方法相同),此子类静态方法也是唯一的,并且不同于其父类中的静态方法。


答案 2

静态方法不能被重写,因为它们是两种不同的方法,所以没有什么可重写的。例如

static class Class1 {
    public static int Method1(){
          return 0;
    }
}
static class Class2 extends Class1 {
    public static int Method1(){
          return 1;
    }

}
public static class Main {
    public static void main(String[] args){
          //Must explicitly chose Method1 from Class1 or Class2
          Class1.Method1();
          Class2.Method1();
    }
}

是的,静态方法可以像任何其他方法一样重载。