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