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