一. 介紹 1. 介面 Interface 介面可以稱之為一種規範,在Java中被用來定義一組方法,而不提供具體的實現細節,它規定了一個類應該要實現哪些方法;其他類可以通過實現介面來達到代碼重用和多態性的目的,幫助我們構建可擴展、靈活和可復用的代碼。 介面使用步驟: - 定義介面:使用關鍵字inte ...
一. 介紹
1. 介面 Interface
介面可以稱之為一種規範,在Java中被用來定義一組方法,而不提供具體的實現細節,它規定了一個類應該要實現哪些方法;其他類可以通過實現介面來達到代碼重用和多態性的目的,幫助我們構建可擴展、靈活和可復用的代碼。
介面使用步驟:
- 定義介面:使用關鍵字interface定義介面,併在其中編寫方法的聲明。
- 實現介面:在類中使用implements關鍵字來實現介面,並提供介面中聲明的方法的具體實現。一個類可以實現多個介面,使用逗號分隔。
- 實現介面的方法:類必須實現介面中的所有方法,並提供具體的實現代碼。
// 定義介面 關鍵字:interface interface Printable { void print(); // 聲明一個列印方法 } // 實現介面 關鍵字 implements class MyClass implements Printable { public void print() { System.out.println("Hello, World!"); } }
2. 抽象類
抽象類常用於定義一組通用行為和屬性,它提供了一種約束和規範子類的方式,類中可以有抽象和非抽象的方法,子類必須實現(重寫)抽象類中的所有抽象方法;非抽象的方法,已經有具體的實現,子類可以繼承並直接使用。
抽象類的使用步驟:
- 使用關鍵字 "abstract" 來聲明一個抽象類。抽象類不能被實例化,只能作為父類來定義子類的共性。
- 在抽象類中可以定義抽象方法和具體方法。抽象方法是沒有實現體的方法,它只包含方法的聲明但沒有方法體。具體方法則有方法體和實現。
- 使用關鍵字 "extends" 來繼承抽象類。一個子類只能繼承一個抽象類
- 子類繼承抽象類時,必須實現(覆蓋)抽象類中的所有抽象方法,除非子類也是抽象類,子類就可以選擇性地重寫具體方法。
- 如果子類沒有實現抽象類中的所有抽象方法,那麼子類也必須聲明為抽象類。
- 實例化子類對象,並調用相應的方法。
// 創建抽象類 Animal public abstract class Animal { String name; // 無方法體的抽象方法,子類必須要實現 public abstract void sound(); // 有方法體的抽象方法,子類無需在實現,可重寫 public void sleep() { System.out.println("The animal is sleeping."); } } // 子類 dog public class Dog extends Animal { // 實現抽象方法 @Override public void sound() { System.out.println("實現Animal中的抽象方法:sound"); } // 根據業務需求可重寫, @Override public void sleep() { super.sleep(); } }
二. 區別
1. 定義:
抽象類更適合作為其他類的基類,提供一些通用的屬性和方法的實現,抽象類使用關鍵字:abstract;
介面主要用於定義一組行為規範,介面使用關鍵字:interface ;
2. 繼承與實現:
一個類只能繼承一個抽象類,使用關鍵字:extends繼承;
一個類可以實現多個介面,使用關鍵字:implements實現;
3. 構造函數:
抽象類可以有構造函數;
介面不能有構造函數;
4. 屬性:
抽象類可以有實例變數,且支持聲明和使用;
介面的成員變數是被public static final 預設修飾的,必須在聲明時進行初始化,並且一旦初始化後就不能再修改其值;
5. 方法實現:
抽象類中包含普通方法和抽象方法,被繼承的類,需要重寫所有抽象方法,而普通方法可以直接使用。
介面中的方法都是抽象的,需要在實現類中寫具體實現邏輯。
6. 介面的多態性:
由於一個類可以實現多個介面,因此可以通過介面實現更靈活的多態性,而抽象類的多態性較為有限。
總之,介面主要用於定義一組行為規範,而抽象類則更適合作為其他類的基類,提供一些通用的屬性和方法的實現。根據具體的需求和設計目標,選擇使用介面還是抽象類,並按照對應的語法規則進行定義與實現。
完