如何在Java中確保子類覆蓋超類方法?


沒有方法體的方法稱為抽象方法。它只包含方法簽名和一個分號,以及它前面一個**抽象**關鍵字。

public abstract myMethod();

要使用抽象方法,您需要透過擴充套件其類來繼承它,併為其提供實現(方法體)。如果一個類包含至少一個抽象方法,則必須將其宣告為抽象類。

換句話說,如果您擴充套件了一個抽象類,則必須實現(覆蓋)其中的所有抽象方法,或者將其宣告為抽象類,否則對於每個未覆蓋的抽象方法都會生成一個編譯時錯誤,提示“subclass_name 不是抽象的並且沒有覆蓋 classname 中的抽象方法 abstractmethod_name”。

示例

下面的 Java 示例包含兩個抽象類:一個是包含 3 個抽象方法的抽象類 (MyClass),另一個是名為 AbstractClassExample 的類,它擴充套件了前一個類。

在子類中,我們只覆蓋了一個抽象方法 (display())。

import java.io.IOException;
abstract class MyClass {
   public abstract void display();
   public abstract void setName(String name);
   public abstract void setAge(int age);
}
public class AbstractClassExample extends MyClass{
   public void display(){
      System.out.println("subclass implementation of the display method ");
   }
   public static void main(String args[]) {
      new AbstractClassExample().display();
   }
}

編譯時錯誤

編譯時,上述方法會生成以下編譯時錯誤。

AbstractClassExample.java:9: error: AbstractClassExample is not abstract and does not override abstract method setAge(int) in MyClass
public class AbstractClassExample extends MyClass{
^
1 error

因此,如果您需要確保子類覆蓋超類方法的特定方法,您只需要將所需方法宣告為抽象方法。

要使上述程式工作,您需要實現所有抽象方法,如下所示:

示例

abstract class MyClass {
   public abstract void display();
   public abstract void setName(String name);
   public abstract void setAge(int age);
}
public class AbstractClassExample extends MyClass{
   public void display(){
      System.out.println("subclass implementation of the display method ");
   }
   public void setName(String name){
      System.out.println("Name: "+name);
   }
   public void setAge(int age){
      System.out.println("Age: "+age);
   }
   public static void main(String args[]) {
      AbstractClassExample obj = new AbstractClassExample();
      obj.display();
      obj.setName("Krishna");
      obj.setAge(20);
   }
}

輸出

subclass implementation of the display method
Name: Krishna
Age: 20

更新於: 2019年8月1日

605 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.