Java 中可以重载或覆盖静态方法吗?


如果一个类有多个名称相同但参数不同的函数,则称为方法重载。如果子类提供了其父类已提供的某个方法的具体实现,则称为方法覆盖。

方法重载提高了程序的可读性。方法覆盖提供了其超类参数在重载的情况下必须不同,在覆盖的情况下必须相同的方法的具体实现。

现在考虑静态方法的情况,那么静态方法在重载和覆盖方面有以下规则。

  • 可以通过另一个静态方法重载。

  • 不能被子类中的另一个静态方法覆盖。其背后的原因是子类只隐藏了静态方法,而不是覆盖它。

示例

以下示例演示了这一点。

class SuperClass {
   public static void display() {
      System.out.println("SuperClass.display()");
   }

   //Method overloading of static method
   public static void display(int a) {
      System.out.println("SuperClass.display(int): " + a);
   }
}

class SubClass extends SuperClass {
   //Not method overriding but hiding
   public static void display() {
      System.out.println("SubClass.display()");
   }
}

public class Tester {
   public static void main(String[] args) {
      SuperClass object = new SubClass();

      //SuperClass display method is called
      //although object is of SubClass.
      object.display();        
      object.display(1);    
   }
}

输出

SuperClass.display()
SuperClass.display(int): 1

注意

  • 静态方法在编译时解析,不能被子类覆盖。实例方法在运行时解析,可以被覆盖。

  • 静态方法可以重载。

更新于: 2023-12-01

4K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告