這裏從以下幾個方面比較:
1.構造方法
抽象類可以有構造方法
接口沒有構造方法
2.訪問修飾符
抽象類中的方法可以用public、protected和default這些修飾符修飾
接口中的方法默認修飾符爲public,有且只有public修飾符
3.main方法
抽象類中可以有main方法,可被執行
接口沒有main方法
4.默認方法實現
抽象類中聲明的方法可以有默認的實現
接口中只有方法的聲明,根本不存在方法實現
5.方法實現
子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要對抽象類中所有聲明的方法進行實現
子類使用關鍵字implements來實現接口。它需要對接口中所有聲明的方法進行實現
6.添加新方法
抽象類中添加新方法,可以在該類中進行默認實現,不需要修改子類,或者,所有已繼承該抽象類的子類,提供新方法的實現,需要修改子類
接口中添加新方法,所有實現該接口的子類,必須提供新方法的實現,需要修改所有子類
7.多繼承
抽象類可以繼承一個類,實現多個接口
接口可以繼承一個或者多個接口
8.與普通java類比較
抽象類無法實例化對象
接口是與類完全不同的類型
9.速度
抽象類比接口的速度稍快
接口稍慢,需要時間尋找類中具體實現的方法