我们可以覆盖Java中的私有方法吗

理想情况下没有。但是,使用这个复杂的代码,子类也可以覆盖私有方法。请参见下面的−示例

示例

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.