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