接口和抽象類都遵循”面向接口而不是實現(xiàn)編碼”設計原則,它可以增加代碼的靈活性,可以適應不斷變化的需求。
下面有幾個點可以幫助你回答這個問題:在 Java 中,你只能繼承一個類,但可以實現(xiàn)多個接口。所以一旦你繼承了一個類,你就失去了繼承其他類的機會了。
接口通常被用來表示附屬描述或行為如: Runnable 、 Clonable 、 Serializable 等等,因此當你使用抽象類來表示行為時,你的類就不能同時是 Runnable 和 Clonable( 注:這里的意思是指如果把 Runnable 等實現(xiàn)為抽象類的情況 ) ,因為在 Java 中你不能繼承兩個類,但當你使用接口時,你的類就可以同時擁有多個不同的行為。
在一些對時間要求比較高的應用中,傾向于使用抽象類,它會比接口稍快一點。如果希望把一系列行為都規(guī)范在類繼承層次內,并且可以更好地在同一個地方進行編碼,那么抽象類是一個更好的選擇。有時,接口和抽象類可以一起使用,接口中定義函數(shù),而在抽象類中定義默認的實現(xiàn)。