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