區別:
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。
接口中的方法定義默認為 public abstract 類型,接口中的成員變量類型默認為 public static final (這里需要說一點,既然一個變量被final修飾了,那么這個變量就是一個常量!!!!!變量必須初始化成常量!!!!!)
語法區別:
抽象類可以有構造方法,接口中不能有構造方法。
抽象類中可以有普通成員變量,接口中沒有普通成員變量。
抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
抽象類中的抽象方法的訪問類型可以是public,protected,但接口中的抽象方法只能是public類型的,并且默認即為public abstract類型。
抽象類中可以包含靜態(static)方法,接口中不能包含靜態(static)方法。
抽象類和接口中都可以包含靜態成員變量(static),抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認即為public static final類型。
一個類只能繼承一個抽象類,但是可以實現多個接口。
一個接口可以繼承多個接口。
抽象類所體現的是一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在"is-a"關系關系,即父類和派生類在概念本質上應該是相同的。對于接口則不然,并不要求接口的實現者和接口定義在概念本質上是一致的,僅僅是實現了接口定義的契約而已,是"like-a"的關系。