3.1 抽象類
? ? ? ? 抽象類是從多個類中抽象出來的模板站故。
? ? 抽象方法和抽象類的規(guī)則如下:
? ? ? ? - 抽象類必須使用abstract修飾符來修飾,抽象方法也必須使用abstract來修飾,抽象方法不能有方法體抬闷。
? ? ? ? - 抽象類不能被實(shí)例化缸逃,無法使用new關(guān)鍵字來調(diào)用抽象類的構(gòu)造器創(chuàng)建抽象類的實(shí)例。即使抽象類里不包含抽象方法耐齐,這個抽象類也不能創(chuàng)建實(shí)例浪秘。
? ? ? ? - 抽象類可以包含成員變量、方法埠况、構(gòu)造器耸携、初始化塊、內(nèi)部類(枚舉询枚、接口)5種成員违帆。抽象類的構(gòu)造器不能用于創(chuàng)建實(shí)例,主要是用于被其子類調(diào)用金蜀。
? ? ? ? - 含有抽象方法的類只能被定義為抽象類刷后。
? ? abstract的使用規(guī)則:
? ? ? ? - 當(dāng)使用abstract修飾類時,表明這個類只能被繼承渊抄;當(dāng)時用abstract修飾方法時尝胆,表明這個方法必須由子類重寫。
? ? ? ? - final修飾的類不能被繼承护桦,final修飾的方法不能被重寫含衔。因此final和abstract不能同時使用。
? ? ? ? - 使用static修飾方法時,表明這個方法屬于該類本身贪染,如果用abstract修飾一個類方法缓呛,則用該類調(diào)用該類方法時將出現(xiàn)錯誤。因此static和abstract不能同時修飾某ge方法杭隙,即沒有類抽象方法哟绊。static和abstract可以同時修飾內(nèi)部類。
? ? ? ? - abstract方法不能定義為private訪問權(quán)限痰憎,abstract和private不能同時修飾方法票髓。
3.2 接口
? ? ? ? 接口定義了某一批類所需要遵守的規(guī)范,接口不關(guān)心這些類的內(nèi)部狀態(tài)數(shù)據(jù)铣耘,也不關(guān)心這些類里方法的實(shí)現(xiàn)細(xì)節(jié)洽沟,它只規(guī)定這批類里必須提供某些方法。
? ? ? ? 接口里不能包含普通方法蜗细,接口里的所有方法都是抽象方法裆操。接口里不能包含構(gòu)造器和初始化塊。Java 8對接口進(jìn)行了改進(jìn)鳄乏,允許在接口中定義默認(rèn)方法跷车,默認(rèn)方法可以提供方法實(shí)現(xiàn)。
? ? ? ? 接口所在的原文件名必須與public接口的名稱相同橱野。
? ? 接口的定義規(guī)則如下:
? ? ? ? - 修飾符可以是private或者省略朽缴,如果省略了public訪問控制符,則默認(rèn)使用包權(quán)限訪問控制符水援。
? ? ? ? - 接口名的命名規(guī)則和類相同密强,接口名通常能夠使用形容詞。
? ? ? ? - 一個接口可以有多個父接口蜗元,但接口只能繼承接口或渤,不能繼承類。
? ? 接口成員的定義規(guī)則如下:
? ? ? ? - 接口里的成員變量只能是靜態(tài)常量奕扣,接口里的方法只能是抽象方法薪鹦、類方法、默認(rèn)方法惯豆。
? ? ? ? - 接口的成員可以省略訪問控制修飾符池磁,默認(rèn)為public。如果指定訪問控制修飾符楷兽,則只能使用public訪問控制修飾符地熄。
? ? ? ? - 系統(tǒng)默認(rèn)用 public static final 修飾成員變量,成員變量只能在定義時指定默認(rèn)值芯杀。
? ? ? ? - 系統(tǒng)默認(rèn)用public abstract修飾普通方法端考,且普通方法不能有方法體雅潭。而類方法、默認(rèn)方法必須有方法體却特。實(shí)現(xiàn)接口方法時必須使用public訪問控制修飾符扶供。
? ? ? ? - 系統(tǒng)默認(rèn)用public static修飾內(nèi)部類、內(nèi)部接口核偿、內(nèi)部枚舉诚欠。
????????- 默認(rèn)方法必須使用default修飾,不能使用static修飾漾岳。因此默認(rèn)方法只能由接口的實(shí)現(xiàn)類實(shí)例來調(diào)用。
? ? ? ? - 接口中的類方法必須使用static修飾粉寞,不能使用default修飾尼荆。類方法直接使用接口來調(diào)用。
3.3 接口與抽象類比較
? ? 相同點(diǎn):
????????- 接口和抽象類都不能被實(shí)例化唧垦。它們位于繼承樹的頂端捅儒,用于被其他類實(shí)現(xiàn)和繼承。
? ? ? ? - 接口和抽象類都可以包含抽象方法振亮,實(shí)現(xiàn)接口和繼承抽象類的普通子類都必須實(shí)現(xiàn)這些抽象方法巧还。
? ? 不同點(diǎn):
? ? ? ? - 接口里只能包含抽象方法、靜態(tài)方法和默認(rèn)方法坊秸,不能為普通方法提供方法實(shí)現(xiàn)麸祷;抽象類則完全可以包含普通方法。
? ? ? ? - 接口里只能定義靜態(tài)常量褒搔,不能定義普通成員變量阶牍;抽象類里即可以定義普通成員變量,也可以定義靜態(tài)常量星瘾。
? ? ? ? - 接口里不包含構(gòu)造器走孽;抽象類里可以包含構(gòu)造器,用于子類創(chuàng)建實(shí)例時初始化抽象類琳状。
? ? ? ? - 接口里不能包含初始化塊磕瓷;抽象類可以包含初始化塊。
? ? ? ? - 一個類最多只能有一個直接父類念逞,包括抽象類困食;一個類可以直接實(shí)現(xiàn)多個接口。