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

Popular posts from this blog

How to write data into a excel file using vbscript

Format date as yyyy-mm-dd using vbscript