适用于Java静态方法的限制

如果将static关键字应用于任何方法,它将成为静态方法。

如果方法声明为静态,则它是类的成员,而不是属于该类的对象。可以在不创建该类的对象的情况下调用它。静态方法还具有访问类的静态数据成员的能力。

静态方法有一些限制

  • 静态方法不能使用非静态数据成员,也不能直接调用非静态方法。

  • this和super不能在静态上下文中使用。

  • 静态方法只能访问静态类型数据(静态类型实例变量)。

  • 无需创建类的对象来调用静态方法。

  • 静态方法不能在子类中覆盖

让我们看看尝试覆盖子类中的静态方法时会发生什么

示例

class Parent {
   static void display() {
      System.out.println("Super class");    
   }
}
public class Example extends Parent {
   void display()  // trying to override display() {
      System.out.println("Sub class");  
   }
   public static void main(String[] args) {
      Parent obj = new Example();
      obj.display();
   }
}

这会生成一个编译时错误。输出如下-

Example.java:10: error: display() in Example cannot override display() in Parent
void display()  // trying to override display()     ^
overridden method is static
1 error