接口和抽象類都提供了抽象方法和多重繼承,但它們在方法實現、實例化和訪問權限上有區別。接口強制實現所有方法,不能被實例化,且方法默認是 public 的;抽象類可以包含具體方法,可以被實例化,且方法可以具有任何訪問權限。接口用于定義公共行為和解耦模塊,而抽象類用于定義部分行為和創建通用的基類。
Java 接口和抽象類的使用
Java 中的接口和抽象類是定義對象行為和限制的兩種機制,它們具有一些共同點,但也有一些關鍵區別。
共同點
立即學習“Java免費學習筆記(深入)”;
1. 方法實現
- 接口中的所有方法都是抽象的,必須由實現該接口的類來實現。
- 抽象類可以包含抽象方法和具體方法(已實現的方法)。
2. 實例化
- 接口不能被實例化,而抽象類可以被實例化。
- 當實例化一個抽象類時,它的所有抽象方法必須被重寫或實現。
3. 訪問權限
使用場景
接口:
- 用于定義公共行為,要求實現類實現該行為。
- 用于解耦不同的模塊,因為接口隱藏了實現的細節。
- 用于創建可插拔的架構,允許動態添加或更改功能。
抽象類:
- 用于定義部分行為,允許實現類擴展并修改該行為。
- 用于創建通用的基類,為子類提供公共字段和方法。
- 用于在繼承層次結構中強制實施某些行為或限制。
舉例
接口示例:
// 定義一個 Shape 接口,它定義了獲取形狀面積和周長的行為 public interface Shape { double getArea(); double getPerimeter(); }
抽象類示例:
// 定義一個 Animal 抽象類,它定義了 getName 和 makeSound 方法 public abstract class Animal { protected String name; public String getName() { return name; } public abstract void makeSound(); }