- 接口的方法默認是 public,所有方法在接口中不能有實現(Java 8 開始接口方法可以有默認實現),而抽象類可以有非抽象的方法。
- 接口中除了static、final變量,不能有其他變量,而抽象類中則不一定。
- 一個類可以實現多個接口,但只能實現一個抽象類。接口自己本身可以通過extends關鍵字擴展多個接口。
- 接口方法默認修飾符是public,抽象方法可以有public、protected和default這些修飾符(抽象方法就是爲了被重寫所以不能使用private關鍵字修飾!)。
- 從設計層面來說,抽象是對類的抽象,是一種模板設計,而接口是對行爲的抽象,是一種行爲的規範。
備註:在JDK8中,接口也可以定義靜態方法,可以直接用接口名調用。實現類和實現是不可以調用的。如果同時實現兩個接口,接口中定義了一樣的默認方法,則必須重寫,不然會報錯。(詳見issue:https://github.com/Snailclimb/JavaGuide/issues/146)