Java:詳解 抽象類(abstract class) & 介面(Interface)的區別
前言
·在Java中,實現 抽象的機制有2種:抽象類(abstract class)和介面(Interface)
·二者非常類似,甚至可相互替換,因此很多開發者開發時對於二者的選擇十分隨意。其實,2者之間存在很大區別
·本文將對抽象類(abstract class)、介面(Interface) & 之間的區別 進行詳細 講解剖析
目錄

944365-a1e1e9d25cc5ab64.png
1. 知識儲備:抽象是什麼?

944365-ab1217fe0d3ec3cb.png
下面,將主要講解Java中抽象的2種實現方式:抽象類(abstract class)和介面(Interface)
2. 抽象類(abstract class)

944365-ab1217fe0d3ec3cb.png
示例:
// 定義1抽象動物類Animal,提供抽象方法 = cry() public abstract class Animal { public abstract void cry(); } // 貓、狗 = 動物類的子類 // 由於cry()為抽象方法,所以Cat、Dog必須要實現cry() public class Cat extends Animal{ @Override public void cry() { System.out.println("貓叫:喵喵..."); } } public class Dog extends Animal{ @Override public void cry() { System.out.println("狗叫:汪汪..."); } } // 測試 public class Test { public static void main(String[] args) { Animal a1 = new Cat(); Animal a2 = new Dog(); a1.cry(); a2.cry(); } } // 執行結果 貓叫:喵喵... 狗叫:汪汪...
3. 介面(Interface)
介紹如下:

944365-ab1217fe0d3ec3cb.png
示例:
interface Demo{ void method1(); void method2(); } class Test implements Demo{ void method1(); void method2(); }
4. 二者的區別

1.png
5. 例項講解
下面給出1個簡單的例子,讓大家更好地去理解二者的區別 & 應用場景
5.1 需求描述
需求1:有1類門,其本質功能 = 開門 & 關門
需求2:為上述這類門增加1個報警器,可進行報警
5.2 需求實現
該需求的實現方案有3種,均可完成需求:
1=只使用抽象類、2=只使用介面、3=同時使用抽象類 & 介面
具體請看如下:
// 方案1:只使用抽象類 abstract class Door{ abstract void open(); abstract void close(); abstract void alarm(); } // 具體使用時 class AlarmDoor extends Door { void open(){} void close(){} void alarm(){} } // 方案2:只使用介面 interface Door{ void open(); void close(); void alarm(); } // 具體使用時 class AlarmDoor implementsDoor { void open(){} void close(){} void alarm(){} } // 方案3:同時使用抽象類 & 介面 // 對於需求1 = 抽象1類事物,即 使用抽象類 abstract class Door{ abstract void open(); abstract void close(); } // 對於需求2 = 抽象事物中的某個行為, 即 使用 介面 interface Alarm{ void alarm(); } // 具體使用時 class AlarmDoor extends Door implements Alarm{ void open(){} void close(){} void alarm(){} }
雖然3種實現方式均可完成需求,可是,明顯使用方案3 更加符合 抽象類 & 介面的使用