是否可以在 Java 中重寫私有方法\n


理論上是不能的。但是,使用一種取巧的方法,子類同樣可以重寫私有方法。參見下面的示例 −

示例

即時演示

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-6-2020

1K+ 檢視

開啟您的 職業生涯

完成課程以獲得認證

開始
廣告
© . All rights reserved.