我們可以在 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.