我们可以在 Java 中重写私有方法吗\n


理想情况下,没有。但是,使用 tricky 代码,子类也可以重写私有方法。请参阅以下示例 −

示例

实时演示

class A {
   private void display() {
      System.out.println("A.display");
   }
    public void callDisplay() {
      System.out.println("A.callDisplay");
      display();
   }
}

class B extends A {
   private void display() {
      System.out.println("B.display");
   }
    public void callDisplay() {
      System.out.println("B.callDisplay");
      display();
   }  
}

public class Tester {
   public static void main(String[] args) {
      A a = new B();
      a.callDisplay();

      B b = new B();
      b.callDisplay();

      A a1 = new A();
      a1.callDisplay();
   }
}

输出

B.callDisplay
B.display
B.callDisplay
B.display
A.callDisplay
A.display

在上述示例中,一个对象属于 B 类,a.callDisplay() 会调用 B 的 callDisplay() 方法,该方法又调用 B 的 display 方法。

根据 Java 文档 Java 教程:预定义注解类型.

虽然在重写其超类中的方法时不需要使用此注解,但这有助于防止错误。如果使用 @Override 标记的方法在其中一个超类中正确重写一个方法失败,将生成一个错误。

在 B.display() 方法上添加 @Override 注解。Java 编译器将抛出错误。

class B extends A {
   @Override
   private void display() {
      System.out.println("B.display");
   }

   public void callDisplay() {
      System.out.println("B.callDisplay");
      display();
   }  
}

输出

The method display() of type B must override or implement a supertype method.

更新时间: 18-Jun-2020

1000+ 查看

开启您的 职业生涯

完成课程获得认证

开始吧
广告
© . All rights reserved.