Java 中介面與抽象類的區別

什麼是介面

介面是一個可用於實現類的藍圖。該介面不包含任何具體方法(具有程式碼的方法)。介面的所有方法都是抽象方法。

Java 無法例項化介面。但是,可以例項化實現介面的類。介面永遠不包含例項變數,但它們可以包含公共靜態最終變數(即常量類變數)

什麼是抽象類?

在其宣告中具有 abstract 關鍵字的類稱為抽象類。抽象類應該至少有一個抽象方法,即沒有具體實現的方法。它可以有多種具體方法。

抽象類允許你為具體類建立藍圖。但是繼承類應該實現抽象方法。抽象類無法例項化。

使用介面的重要原因

  • 介面用於實現抽象。
  • 旨在支援執行時的動態方法解析
  • 它可以幫助你實現鬆耦合。
  • 允許你將方法的定義與繼承層次結構分開

使用抽象類的重要原因

  • 抽象類為子類提供預設功能。
  • 為將來的特定類提供模板
  • 幫助你為其子類定義公共介面
  • 抽象類允許程式碼可重用性。

介面與抽象類

引數 介面 抽象類
速度
多重繼承 實現幾個介面 只有一個抽象類
結構 抽象方法 摘要和具體方法
何時使用 未來的增強 為了避免獨立
繼承/實施 一個 Class 可以實現多個介面 該類只能繼承一個抽象類
預設實施 在向介面新增新內容時,找到所有實現者並實現新定義的東西是一場噩夢。 對於 Abstract Class,你可以利用預設實現。
訪問修飾符 該介面沒有訪問修飾符。介面內定義的所有內容都假定為 public 修飾符。 Abstract 類可以有一個訪問修飾符。
何時使用 當各種實現僅共享方法簽名時,最好使用介面。值型別的多型層次結構。 當相同型別的各種實現共享共同行為時,應該使用它。
資料欄位 該介面不能包含資料欄位。 該類可以有資料欄位。
多重繼承預設值 一個類可以實現許多介面。 一個類只繼承一個抽象類。
實施 介面是抽象的,因此無法提供任何程式碼。 抽象類可以提供應該被覆蓋的完整的預設程式碼。
使用 Access 修飾符 你不能對方法,屬性等使用訪問修飾符 你可以使用包含訪問修飾符的抽象類。
用法 介面有助於定義類的外圍功能。 抽象類定義類的標識。
定義的欄位 沒有欄位可以定義 抽象類允許你定義欄位和常量
繼承 介面可以繼承多個介面但不能繼承類。 抽象類可以繼承一個類和多個介面。
建構函式或解構函式 介面不能宣告建構函式或解構函式。 抽象類可以宣告建構函式和解構函式。
擴充套件限制 它可以擴充套件任意數量的介面。 它一次只能擴充套件一個類或一個抽象類。
抽象關鍵字 在抽象介面關鍵字中,可以選擇將方法宣告為抽象。 在抽象類中,abstract 關鍵字是將方法宣告為抽象的必需項。
類型別 介面只能有公共抽象方法。 抽象類具有保護和公共抽象方法。

Java 中的介面和抽象類的示例程式碼

以下是在 Java 中建立介面和抽象類的示例程式碼

介面語法

interface name{
//methods
}

Java 介面示例:

interface Pet {
    public void test();
}
class Dog implements Pet {
    public void test() {
        System.out.println("Interface Method Implemented");
    }
    public static void main(String args[]) {
        Pet p = new Dog();
        p.test();
    }
}

抽象類語法

abstract class name{
    //code
}

抽象類示例:

abstract class Shape {
    int b = 20;
    abstract public void calculateArea();
}
public class Rectangle extends Shape {
    public static void main(String args[]) {
        Rectangle obj = new Rectangle();
        obj.b = 200;
        obj.calculateArea();
    }
    public void calculateArea() {
        System.out.println("Area is " + (obj.b * obj.b));
    }
}