介面和抽象類 (abstract)

约翰發表於2020-12-25

一、抽象類:
被 abstract 修飾的類,稱為抽象類;
被 abstract 修飾的方法稱為:抽象方法,抽象方法只有方法宣告沒有方法體;

抽象類特點:
1.不能被例項化,只能被繼承;
2.抽象類是否包含抽象方法均可,也可以包含普通方法;包含抽象方法的類一定要宣告為抽象類;
3.抽象方法的修飾符只能有:public 、protect 和 defalut,預設是 public
4.一個類繼承抽象類,則子類必須實現抽象類的抽象方法,否則子類也必須定義為抽象類;
5.抽象類可以包含:屬性、方法、構造方法,但構造方法不能用來例項化物件,只能被子類呼叫;

二、介面:
介面是一種特殊的類,只能用 interface 修飾

介面特點:
1.介面中可以包含:屬性和方法;
2.介面可以支援多繼承,即:一個介面可以
3.一個類可以實現多個介面,一個類實現某個介面則必須實現介面中的抽象方法,否則該類必須定義為抽象類;

三、相同點:
1.均不能被例項化
2.兩者都包含抽象方法,實現介面或繼承抽象類的普通子類必須實現這些抽象方法

四、區別:
1.功能性:
介面:定義規範,類似於:系統總綱
抽象類:抽象出子類通用特性,體現的是模版式設計
2.實現:
介面:子類使用 implements 關鍵字實現介面,需要提供介面中所有宣告方法的實現;
介面可以 extends 另一個介面
抽象類:子類使用 extends 來繼承抽象類,如果子類不是抽象類,則需要提供抽象類所有宣告方法的實現;
3.訪問修飾符:
介面:public
抽象類:public 、protected 和 defalut
4.方法:
介面:不能包含普通方法;
抽象類:可以包含普通方法;
5.變數:
介面:只能定義靜態常量,不能定義普通成員變數;
抽象類:既可以定義靜態常量,也可以定義普通成員變數;
6.構造方法:
介面:無
抽象類:構造方法不是用於建立物件,而是讓其他子類呼叫這些構造方法來完成屬於抽象類的初始化操作;
7.初始化塊:
介面:無
抽象類:可以包含;
8.main 方法:
介面:無
抽象類:可以有
9.與普通 java 類的區別:
介面:是完全不同的型別
抽象類:抽象類不能被例項化,其他方面與普通類沒有任何區別;
10.執行速度:
介面:稍慢
抽象類:比介面快

五、應用場景:
1.如果有一些方法並想讓它們有預設實現,則使用抽象類;
2.如果想實現多重繼承,使用介面;
3.如果基本功能不斷改變,則使用抽象類;

相關文章