修飾符abstract:抽象的,定義框架不去實現,可以修飾類和方法
abstract修飾類:
會使這個類成爲一個抽象類,這個類將不能生成對象實例,但可以做爲對象變量聲明的類型,也就是編譯時類型
抽象類就相當於一個類的半成品,需要子類繼承並覆蓋其中的抽象方法,這時子類才又創建實例的能力,如果子類沒有實現父類的抽象方法,那麼子類也要爲抽象類。
abstract修飾方法:
會使這個方法變成抽象方法,也就是隻有聲明而沒有實現,實現部分以";"代替,需要子類繼承實現。
抽象方法代表了某種標準,定義標準,定義功能,在子類中去實現功能(子類繼承了父類並需要給出從父類繼承的抽象方法的實現)。
方法一時間想不到怎麼被實現,或有意要子類去實現而定義某種標準,這個方法可以被定義爲抽象。
注意:
有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
接口(interface):
接口的定義:接口從本質上說是一種特殊的抽象類。
關鍵字interface。
在接口中,所有的方法爲公開、抽象的方法:public abstract
在接口中,所有的屬性都是公開、靜態的常量:public static final
接口與接口之間可以多繼承,用extends,多個之間用逗號隔開。
接口中沒有構造方法,不能用“new 接口名”來實例化一個接口,但可以聲明一個接口。
接口的實現:
關鍵字implements
一個類實現一個接口必須實現接口中所有的方法,否則其爲抽象類,並且在實現類中的方法要加上public(不能省略)。
類中的默認修飾符:default。
接口中的默認修飾符:public。
一個類除了繼承另一個類外(只能繼承一個類),還可以實現多個接口(接口之間用逗號分隔)。
接口的作用:
間接實現多繼承:用接口來實現多繼承並不會增加類關係的複雜度。因爲接口不是類,與類不在一個層次上,是在類的基礎上進行再次抽象。
接口可以抽象出次要類型,分出主、次關係類型,符合看世界的一般方法。
接口隔離,與封裝性有關。一個對象都有多個方面,可以只展示其中幾個方面,其他的都隱藏。因此可以看爲“更高層次的封裝”,把 一個大接口做成若干個小接口。
通過接口制定標準(最重要的作用)
接口:制定標準。
接口的調用者:使用標準。
接口的實現類:實現標準。
解耦合作用:把使用標準和實現標準分開,使得標準的制定者和實現者解除偶合關係,具有極強的可移植性
例:sun公司提供一套訪問數據庫的接口(標準),java程序員訪問數據庫時針對數據庫接口編程。接口由各個數據庫廠商負責實現。
接口編程的原則
儘量針對接口編程(能用接口就儘量用接口)
接口隔離原則(用若干個小接口取代一個大接口)
注意:
接口中沒有構造器,也沒有main方法