如果Java子類沒有覆蓋抽象方法會發生什麼?


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

public abstract myMethod();

要使用抽象方法,需要透過擴充套件其類來繼承它,併為其提供實現。

包含一個或多個抽象方法的類稱為抽象類。如果它包含至少一個抽象方法,則必須將其宣告為抽象類。

擴充套件抽象類

在Java中擴充套件抽象類後,需要覆蓋其中的所有抽象方法,或者將其宣告為抽象類。如果不這樣做,對於每個未覆蓋的抽象方法都會生成一個編譯時錯誤,提示“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("This is the 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 abstract class AbstractClassExample extends MyClass{
   public void display(){
      System.out.println("This is the subclass implementation of the displaymethod ");
   }
}

更新於:2020年6月29日

6K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.