java基礎總結(面試高頻問題)十:java抽象類和介面的區別

溫酒YXY發表於2020-10-29

1:抽象類:關鍵字abstract修飾
(1)可以修飾類,也可以修飾方法;
(2)修飾類的話,抽象類可以建立構造方法,但是不可以例項化,建立構造方法的目的是為了子類的呼叫;
(3)有抽象方法的類一定是抽象類,抽象類可以沒有抽象方法,抽象類可以有非抽象的方法;
(4)如果抽象類的子類重寫了所有的抽象方法,子類可以是非抽象的,且可以例項化;
(5)如果抽象類的子類沒有重寫所有的抽象方法,則子類是抽象類,不可以例項化;

2:介面:關鍵字interface修飾
(1)介面不能例項化,不能建立構造方法;
(2)介面裡的方法可以是靜態方法(jdk1.8之後)、預設方法(default 返回型別 方法名(){})或者抽象方法,這裡的抽象方法可以省略關鍵字abstract,這裡的靜態方法只能由介面自己呼叫(介面名.方法名),這裡的預設方法可以使用實現類物件呼叫;
(3)一個類可以實現多個介面,一個介面可以繼承介面;
(4)介面裡的方法必須是public訪問許可權,可以省略public(因為不寫的話預設就是public訪問許可權);
(5)介面可以含有變數,但是介面中的變數會被隱式修飾為public static final,並且只能是public型別;

3:抽象類和介面的區別:
(1)介面被用於常用的功能,便於日後維護和新增刪除,而抽象類更傾向於充當公共類的角色,不適用於日後重新對立面的程式碼修改。功能需要累積時用抽象類,不需要累積時用介面;
(2)介面只有定義,不能有方法的實現(jdk1.8以後可以定義default方法體),而抽象類可以有定義與實現,方法可在抽象類中實現;
(3)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是 public static final 型別的;
(4)一個類只能繼承一個抽象類,而一個類卻可以實現多個介面;
(5)介面強調特定功能的實現,而抽象類強調所屬關係;
(6)抽象類使用的是 is a 關係,介面使用的 like a 關係;

相關文章