接口和抽象類有好多相同點(diǎn)和類似點(diǎn),很多人有過(guò)這樣的疑問(wèn):為什么有的地方必須使用接口而不是抽象類,而在另一些地方,又必須使用抽象類而不是接口呢?或者說(shuō),在考慮Java類的一般化問(wèn)題時(shí),很多人會(huì)在接口和抽象類之間猶豫不決,甚至隨便選擇一種。
理解抽象類
abstract class和interface在Java語(yǔ)言中都是用來(lái)進(jìn)行抽象類(本文 中的抽象類并非從abstract class翻譯而來(lái),它表示的是一個(gè)抽象體,而abstract class為Java語(yǔ)言中用于定義抽象類的一種方法, 請(qǐng)讀者注意區(qū)分)定義的,那么什么是抽象類,使用抽象類能為我們帶來(lái)什么好處呢?
抽象類:
抽象類是一種特殊的基類,里面除包含一些基本的屬性和方法之外,還能包含一些只聲明但沒(méi)有實(shí)現(xiàn)的方法,用abstract去聲明
例如:
接口:接口是一種更加抽象的類型,里面聲明的方法全部公開(kāi)給實(shí)現(xiàn)者去實(shí)現(xiàn),并不關(guān)心具體細(xì)節(jié) 關(guān)鍵字是interface
例如:
綜上所看 可以看出抽象類和接口的主要區(qū)別有:
1.抽象類可以有自己的方法,但接口的方法只有聲明
2.抽象類的抽象方法使用abstract聲明
其它需要注意的有:
1.一個(gè)類只能繼承一個(gè)實(shí)現(xiàn)類,但是可以實(shí)現(xiàn)多個(gè)接口
2.當(dāng)一個(gè)抽象類和一個(gè)接口有公共的屬性時(shí),如果一個(gè)類同時(shí)實(shí)現(xiàn)這個(gè)抽象類和接口 則編譯不會(huì)通過(guò)。
接口:
一種高度抽象的“抽象類”,使用interface關(guān)鍵字聲明
下面定義一個(gè)Usb接口:
public interface Usb {
public void start();
public void end();
}
接口中沒(méi)有構(gòu)造方法
接口和抽象類一樣,不能用于實(shí)例化
接口中不能定義變量,方法不準(zhǔn)有方法體,方法默認(rèn)為public,接口中方法和抽象方法不準(zhǔn)有private修飾
只能繼承接口,支持多繼承(接口之間用逗號(hào)隔開(kāi))
類實(shí)現(xiàn)接口,使用關(guān)鍵字implements:
1.必須實(shí)現(xiàn)這個(gè)接口的所有方法,除非實(shí)現(xiàn)類是抽象類
2.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口