其實java8引入了default默認方法後,接口抽象類的差別被縮小了,所以這個問題的意義就沒那麼大了,而且實際中我們通常只使用接口
關鍵的區別有4點:
1.接口中的方法必須被其實現類@override ,而抽象類中的方法子類去extends的時候不必須去@override
2.抽象類可以有抽象跟非抽象方法,接口只能由抽象方法,從java8開始接口也可以有默認和靜態方法,那麼實現類也可以不用去override該方法了
3.抽象類單繼承,接口多繼承(可以實現多個)
4.接口可以有final no-final和no-static變量 接口只有靜態變量(static final)
詳細區別參考秒懂百科:
1.抽象類要被繼承 接口要被實現
2.接口只能做方法生命,抽象類中可以做方法聲明跟方法實現
3.抽象類定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量
4.接口是設計的結果,抽象類是重構的結果
5.接口的抽象級別最高
6.抽象類可以用具體的方法跟屬性(跟普通類一樣),接口只能有抽象方法和不可變常量
7.抽象類主要用來抽象類別,接口主要用來抽象功能