what's the difference between abstract class and interface in java?
java語言的抽象類別與介面的差異
- 抽象類別、類別與介面比較
- 多型、動態連結、過載與重寫
- Java與C#的override 差異
- 傳值呼叫、傳址呼叫與傳參考呼叫的比較
- 相關考題
抽象類別、類別與介面比較
1. 繼承: - 抽象類別:
- 類別:一個類別只能繼承一個父類別(單一繼承)。
- 介面:一個類別可以實現多個介面(多重實現),並且不同的介面可以包含相同的方法簽名。
2. 實現:
- 抽象類別:需覆寫(實現)父類別的所有抽象方法。在Java語言可省略@override這行(加在覆寫函式前一行)
- 類別:可以選擇性地覆寫(實現)父類別的方法。
- 介面:必須實現介面中定義的所有方法,否則該類別必須聲明為抽象(abstract)。
3. 建構子:
- 抽象類別:
- 類別:可以有建構子來初始化物件。
- 介面:不能擁有實體建構子,因為介面不能直接實例化。
4. 儲存狀態:
- 抽象類別:
- 類別:可以有實體變數(屬性;物件的變數)來儲存物件的狀態。
- 介面:不能有實體變數,僅包含方法簽名,但可以定義常數。
5. 單一繼承:
- 抽象類別:
- 類別:只可以繼承一個父類別。
- 介面:一個介面可以擁有多個父介面。
6. 存取修飾子:
- 抽象類別:
- 類別:可有。
- 介面:所有方法都是公開不用寫public 存取修飾子。
7. 適用:
- 抽象類別:
- 類別:共同基礎行為,共用程式碼。
- 介面:共同規範。
多型與過載
- 多型(polymorphism)
- 多型是指允許不同物件以相同介面互動,實際執行方法可能不同。
- 它允許你使用通用的方式處理不同類型的物件,而不需要關心實際的類型。
- 多型的核心概念是子類別可以覆寫(override)父類別的方法,以提供特定的實現。
- 多型出現在運行時,會根據物件實際型別呼叫正確方法。
- 動態連結(Dynamic Binding)或叫動態分派(Dynamic Dispatching):
- 動態連結是指在執行時期,程式碼會根據實際物件的類型來決定要呼叫的方法。
- 這允許使用父類別的引用來引用子類別的物件,並且在執行時期根據實際物件的類型來選擇正確的方法。在 Java 中,動態連結是默認行為。
- 過載(overload)允許同一類別定義多個相同名稱但不同參數之方法,以處裡不同情況。
- 重寫(override)子類別重寫父類別方法。當子類別覆寫父類別的方法時,子類別可以改變方法的實現方式,但方法名稱、參數列表和返回值類型必須與父類別相同。
Java override與C# override的異同
- 相異:寫法不同
+ Java 的重寫方法,前一行要加@override
+ C# 的重寫方法,父類別加virtual 關鍵字如public virtual void method (),子類別加override 關鍵字如public override void method ()。
- 相同:用於在子類別中重寫父類別的虛擬方法。
- 範例:
範例
相關考題
考題一、請解釋 Java 語言中,類別與介面(interface)有那些不同,並請舉例加以說明。
答案
(一)參考上述抽象類別、類別與介面比較
(二)
考題二、傳值呼叫、傳址呼叫與傳參考呼叫的比較
頁尾
Comments
Post a Comment