為什麼 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
廣告