抽象類
- 用abstract修飾
- 不能被實例化,即不能用new關鍵字來實例化對象
- 含有0個或多個抽象方法(抽象類可以沒有抽象方法,但是有抽象方法一定是抽象類)
- 抽象方法只有方法體,沒有實現。
- 如果子類實現了父類的所有抽象方法,那么它可以不是抽象類,否則一定是抽象類
- 可以有具體的方法
接口
- 用interface修飾
- 不能被實例化
- 一個類只能繼承一個類,但是可以實現多個接口
- 接口中的方法均為抽象方法,沒有實現。
- java8開始接口可以有默認實現
- 不能有實例域和靜態方法
區別?
- 接口的方法默認是 public,所有方法在接口中不能有實現(Java 8 開始接口方法可以有默認實現),而抽象類可以有非抽象的方法。
- 接口中除了 static、final 變量,不能有其他變量,而抽象類中則不一定。
- 一個類可以實現多個接口,但只能實現一個抽象類。接口自己本身可以通過 extends 關鍵字擴展多個接口。
- 接口方法默認修飾符是 public,抽象方法可以有 public、protected 和 default 這些修飾符(抽象方法就是為了被重寫所以不能使用 private 關鍵字修飾!)。