首頁  >  文章  >  Java  >  介面與抽象類別在 Java 中的異同與優缺點

介面與抽象類別在 Java 中的異同與優缺點

WBOY
WBOY原創
2024-05-01 09:45:02507瀏覽

介面和抽象類別都是定義類別間契約的機制,但介面可多重繼承且只含抽象方法,而抽象類別僅支援單重繼承且可兼含具體方法和屬性。介面更注重契約定義,促進程式碼重用;抽象類別則提供部分繼承,減少冗餘,但更改抽象類別時必須同步修改子類別。在實戰中,Shape 介面定義了圖形的面積週長獲取方法;Square 的抽象類別實現了面積計算,其具體子類別 SpecificSquare 則實現了周長計算。

接口和抽象类在 Java 中的异同与优缺点

介面與抽象類別在Java 中的異同與優缺點

在Java 中,介面與抽象類別都是用於定義類別之間契約的機制。兩者之間既有相似之處,也有重大差異。

相似之處

  • 介面和抽象類別都無法被實例化。
  • 它們都包含方法聲明,但沒有實作。
  • 子類別必須實作介面或擴充抽象類別中的所有抽象方法。

差異

#特性 介面 抽象類別
存取修飾符 預設是public #可以是public、protected 或default
繼承 可以繼承多個介面 只能繼承一個抽象類別
#實作 只能包含抽象方法 可以包含抽象方法和具體方法
屬性 #只能包含static 和final 的常數 #可以包含屬性和方法
實例化 無法實例化
#實例方法 只能包含抽象方法 可以包含抽象方法和具體方法

優缺點

介面

  • 優點:

    • #為多個實作提供了一個通用契約。
    • 促進程式碼重複使用和模組化。
    • 支援多重繼承。
  • 缺點:

    • #無法包含具體實作。
    • 子類別必須明確實作所有介面方法。

抽象類別

  • #優點:

    • 可以包含具體實現,這可以減少程式碼冗餘。
    • 提供了一個介於介面和特定類別之間的中間選項。
    • 支援部分繼承,允許子類別選擇實作哪些方法。
  • 缺點:

    • #只支援單重繼承。
    • 如果更改抽象類,則需要更改所有子類別。

實戰案例

#定義Shape 介面:

public interface Shape {
    double getArea();
    double getPerimeter();
}

創建Square 的抽象類別和具體類別:

public abstract class Square implements Shape {

    protected double side;

    public Square(double side) {
        this.side = side;
    }

    @Override
    public double getArea() {
        return side * side;
    }
}

public class SpecificSquare extends Square {

    public SpecificSquare(double side) {
        super(side);
    }

    @Override
    public double getPerimeter() {
        return 4 * side;
    }
}

使用Square 介面:

Shape shape = new SpecificSquare(5.0);
double area = shape.getArea();
double perimeter = shape.getPerimeter();

以上是介面與抽象類別在 Java 中的異同與優缺點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn