抽象類和介面的區別


抽象類可以包含抽象方法和非抽象方法,而介面只能包含抽象方法。抽象類是透過擴充套件來使用的,而介面是透過實現來使用的。閱讀本文,瞭解抽象類和介面之間其他差異以及它們在實際程式中的使用方法。

什麼是抽象類?

抽象類充當一個模板,儲存程式的方法和資料成員。當您預計它會被具有公共方法和欄位的不同子類繼承時,應該使用抽象類。

抽象類可以包含或不包含抽象方法,即沒有方法體的函式。但是,如果一個類至少包含一個抽象方法,那麼該類必須宣告為抽象類。

抽象類不能被例項化,但可以被繼承。要使用抽象類,必須從另一個類繼承它,並在其中提供抽象方法的實現。您必須使用關鍵字 **abstract** 來建立抽象類或抽象方法。

抽象方法

抽象方法在基類中沒有任何程式碼;程式碼將在其派生類中新增。如果您繼承了一個抽象類,則必須為其中的所有抽象方法提供實現。如果不這樣做,則子類也必須宣告為抽象類。

擴充套件抽象類

這是一個包含抽象方法和非抽象方法的抽象類的簡單 Java 程式示例:

示例

// abstract class
abstract class Calculator{

   // abstract method
   abstract int add (int a, int b);

   // non-abstract; method with implementation
   int mul (int a, int b){
      return a*b;
   }
}
// Inheriting the abstract class
class Sum extends Calculator{
   public int add (int a, int b){
      return a+b;
   }
}
public class test{
   public static void main (String []args){
      Calculator obj = new Sum();
      System.out.println("The sum is: " + obj.add(2,3));
      System.out.println("The multiplication is: " +
      obj.mul(2,3));
   }
}

輸出

它將產生以下輸出:

The sum is: 5
The multiplication is: 6

什麼是介面?

介面是 Java 中的一種引用型別。它類似於類。它是一組抽象方法的集合。一個類 **實現** 介面,從而繼承介面的抽象方法。

除了抽象方法之外,介面還可以包含常量、預設方法、靜態方法和巢狀型別。只有預設方法和靜態方法才有方法體。

編寫介面類似於編寫類。但是,類描述了物件的屬性和行為。而介面包含類實現的行為。

除非實現介面的類是抽象類,否則介面的所有方法都需要在類中定義。

介面在以下方面類似於類:

  • 介面可以包含任意數量的方法。

  • 介面以 **.java** 副檔名寫入檔案,介面名稱與檔名匹配。

  • 介面的位元組碼出現在 **.class** 檔案中。

  • 接口出現在包中,其對應的位元組碼檔案必須位於與包名稱匹配的目錄結構中。

介面在幾個方面與類不同,包括:

  • 您不能例項化介面。

  • 介面不包含任何建構函式。

  • 介面中的所有方法都是抽象的。

  • 介面不能包含例項欄位。介面中出現的唯一欄位必須同時宣告為 **static** 和 **final**。

  • 介面不是由類擴充套件的;它是由類實現的。

  • 介面可以擴充套件多個介面。

介面具有以下屬性:

  • 介面隱式地是抽象的。在宣告介面時,不需要使用 **abstract** 關鍵字。

  • 介面中的每個方法也隱式地是抽象的,因此不需要 **abstract** 關鍵字。

  • 介面中的方法隱式地是公共的。

實現介面

**interface** 關鍵字用於宣告介面。這是一個在 Java 中宣告和實現介面的簡單示例:

示例

// Declaring the Interface
interface Animal {
   public void eat();
   public void travel();
}
// Implementing the Interface
public class MammalInt implements Animal {
   public void eat() {
      System.out.println("Mammal eats");
   }
   public void travel() {
      System.out.println("Mammal travels");
   }
   public int noOfLegs() {
      return 0;
   }
   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

輸出

它將產生以下輸出:

Mammal eats
Mammal travels

結論

抽象類和介面是面向物件程式設計中的重要概念。我們在這裡使用 Java 程式設計示例來突出抽象類與介面的不同之處,以及開發人員如何使用這些概念。

更新於: 2022年7月28日

5K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.