(三)Java入門---抽象類和接口


一、抽象類概念

抽象類(abstract)是對類的抽象,裏面可以包含抽象方法(只有聲明,沒有具體的實現),也可以包含正常類的變量,抽象類不能實例化,抽象類是爲了子類繼承而存在的,子類必須繼承父類的抽象方法。

二、抽象類的相關問題

子類必須覆蓋抽象類中的所有抽象方法,才能進行實例化(否則,子類裏面還有繼承父類的抽象方法,所以子類是抽象函數,就不能實例化)。

1、抽象類有構造函數嗎?
有,可以用來給子類進行初始化。
2、抽象類可以不存在抽象方法嗎?
可以的。目的是不讓該類創建對象。
3、抽象關鍵字不可以和哪些關鍵字共存啊?
private不可以,如果方法都私有了,子類怎麼繼承啊。static不可以,如果修飾了方法,不能執行,爲啥要定義這種。final修飾的方法不能覆蓋。
4、抽象類一定是父類;因爲抽象類想被使用,必須有人去繼承並覆蓋其方法,子類才能進行實例化。

三、接口(interface)

1、接口是對行爲的抽象,接口中的變量被隱性制定爲public static final,方法被制定爲public abstract,所以方法是不具體實現的。子類可以實現多個接口內容,這叫“多實現”。Implements.
2、接口不能實例化。只有子類覆蓋了接口中的所有抽象方法,子類才能進行實例化對象,否則,這個子類一定是個抽象類(因爲裏面有抽象方法)。
3、本質上是提高子類的擴展性,讓子類可以實現更多功能的方法。
4、接口之間可以多繼承(爲毛啊,因爲不能多繼承的本質是容易造成方法體的不確定性,但是接口內沒有方法體,只有方法,所以,不存在不確定性)。
5、接口具有對外暴露的規則、功能擴展,降低耦合性、多實現。

四、抽象類和接口的區別理解

例子:門都開和關的狀態,所以,可以把門的開關抽象爲一個抽象類;但是,不是所有的門都具有報警功能,所以,可以把報警抽象爲接口,當做一種抽象的方法來實現。
繼承是一個“是不是”的關係(共性關係),而接口實現則是“有沒有”的關係(額外功能)。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實現則是有沒有、具備不具備的關係。
比如:一個導盲犬,肯定是屬於犬類的,不能定義成犬的接口,因爲犬類裏面還有一般實現方法,是共性關係。但是,可以把導盲定義爲接口,這個是犬的額外功能。比如其他導盲設備也可以去實現導盲功能啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章