我们可以在 Java 中覆盖私有或静态方法吗

java 8object oriented programmingprogramming

不,我们不能在 Java 中覆盖私有或静态方法。

Java 中的私有方法对任何其他类都是不可见的,这将它们的范围限制在声明它们的类中。

示例

让我们看看当我们尝试覆盖私有方法时会发生什么 −

class Parent {
   private void display() {
      System.out.println("Super class");    
   }
}
public class Example extends Parent {
   void display() // 尝试覆盖 display() {
      System.out.println("Sub class");
   }
   public static void main(String[] args) {
      Parent obj = new Example();
      obj.display();
   }
}

输出

输出如下 −

Example.java:17: error: display() has private access in Parent
obj.method();
      ^
1 error

该程序给出编译时错误,表明 display() 在 Parent 类中具有私有访问权限,因此无法在子类 Example 中重写。

如果将方法声明为静态,则它是类的成员,而不是属于类的对象。无需创建类的对象即可调用它。静态方法还具有访问类的静态数据成员的权限。

示例

让我们看看当我们尝试在子类中重写静态方法时会发生什么

class Parent {
   static void display() {
      System.out.println("Super class");    
   }
}
public class Example extends Parent {
   void display() // 尝试覆盖 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

相关文章