為什麼 Java 類不能同時是抽象類和最終類?


抽象類

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

如果要使用抽象類中的具體方法,則需要繼承該類,為抽象方法(如果有)提供實現,然後使用子類物件呼叫所需的方法。

示例

在以下 Java 示例中,抽象類 MyClass 包含一個名為 display 的具體方法。

從另一個類(AbstractClassExample)中,我們繼承了 MyClass 類並使用子類物件呼叫其具體方法 display。

 線上演示

abstract class MyClass {
   public void display() {
      System.out.println("This is a method of abstract class");
   }
}
public class AbstractClassExample extends MyClass {
   public static void main(String args[]) {
      new AbstractClassExample().display();
   }
}

輸出

This is a method of abstract class

最終類

如果宣告一個類為 final,則不能擴充套件它。如果嘗試擴充套件最終類,則會生成一個編譯時錯誤,提示“無法從最終的 SuperClass 繼承”。

示例

在以下 Java 程式中,我們有一個名為 SuperClass 的最終類,並且我們試圖從另一個類(SubClass)繼承它。

final class SuperClass {
   public void display() {
      System.out.println("This is a method of the superclass");
   }
}

編譯時錯誤

編譯時,此程式會生成如下所示的編譯錯誤:

SubClass.java:7: error: cannot inherit from final SuperClass
public class SubClass extends SuperClass{
                              ^
1 error

抽象類和最終類

如果宣告一個類為抽象類,則要使用它必須擴充套件它;如果宣告一個類為最終類,則不能擴充套件它。由於兩者相互矛盾,因此不能將一個類同時宣告為抽象類和最終類。如果這樣做,將生成編譯時錯誤。

示例

public final abstract class Example {
   public void sample() {
   }
}

編譯時錯誤

Example.java:1: error: illegal combination of modifiers: abstract and final

public final abstract class Example {
                      ^
1 error

更新於: 2019年10月14日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告