Java提供和支持創建抽象類和接口。它們的實現有共同點,不同點在於:
- 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
- 類可以實現很多個接口,但是只能繼承一個抽象類
- 類可以不實現抽象類和接口聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
- 抽象類可以在不提供接口方法實現的情況下實現接口。
- Java接口中聲明的變量默認都是final的。抽象類可以包含非final的變量。
- Java接口中的成員函數默認是public的。抽象類的成員函數可以是private,protected或者是public。
- 接口是絕對抽象的,不可以被實例化,抽象類也不可以被實例化。
- 一個類實現接口的話要實現接口的所有方法,而抽象類不一定
也可以參考JDK8中抽象類和接口的區別
一句話總結:
從設計層面來說,抽象是對類的抽象,是一種模板設計,接口是行為的抽象,是一種行為的規范。