抽象方法和抽象類特點(diǎn)
抽象方法和抽象類必須使用abstract修飾符來定義,有抽象方法的類只能被定義為抽象類宋渔,抽象類中可以沒有抽象方法。
抽象類必須使用abstract修飾符來修飾,抽象方法也必須使用abstract修飾符來修飾,抽象方法不能有方法體馋缅。
抽象類不能被實(shí)例化
抽象類可以包含成員變量、方法绢淀、構(gòu)造器萤悴、初始化代碼塊、內(nèi)部類皆的,因?yàn)椴荒鼙粚?shí)例化覆履,所有這些都是被子類調(diào)用
含抽象方法的類,只能被定義為抽象類
抽象方法必須為public或者protected(如果為private,則不能被子類繼承硝全,子類無法實(shí)現(xiàn)該方法就沒有其價(jià)值)怪嫌,缺省的情況下默認(rèn)為public
abstract 不能修飾成員變量,不能用于修飾局部變量柳沙,即沒有抽象變量岩灭、抽象成員變量說法;也不能修飾構(gòu)造器赂鲤、沒有抽象構(gòu)造器噪径,抽象類中的構(gòu)造器只能時(shí)普通的構(gòu)造器
使用abstract修飾類時(shí),即表明這個(gè)類只能被繼承数初。當(dāng)使用abstract修飾方法時(shí)找爱,表明這個(gè)方法必須由子類提供實(shí)現(xiàn)。而final修飾的類不能被繼承泡孩,final修飾的方法不能被重寫车摄。因此final和abstract是不能夠同時(shí)使用的。
static修飾一個(gè)方法時(shí)仑鸥,表明這個(gè)方法屬于該類本身吮播,即通過類就可調(diào)用該方法,但該方法被定義為抽象方法眼俊,即通過該類不能調(diào)用沒有方法體的方法意狠。 但是static和abstract可以修飾內(nèi)部類
抽象類的作用
- 抽象父類可以只定義需要使用的某些方法,把不能實(shí)現(xiàn)的部分抽象成抽象方法疮胖,留給其子類實(shí)現(xiàn)
- 父類總可能包含需要調(diào)用其他系列方法的方法环戈,這些被調(diào)方法既可以有父類實(shí)現(xiàn),也可以由子類實(shí)現(xiàn)澎灸。
接口
接口定義基本語法
[修飾符] interface 接口名 extends 父接口1院塞,父接口2
{
零個(gè)到多個(gè)常量定義... 靜態(tài)常量
零個(gè)到多個(gè)抽象方法定義...
零個(gè)到多個(gè)內(nèi)部類、接口性昭、枚舉 默認(rèn)采用了public static
零個(gè)到多個(gè)默認(rèn)方法或類方法定義
}
==Java 8接口==
- 允許在接口中定義默認(rèn)方法拦止,但是必須使用default修飾,但不能使用static修飾巩梢, 總是使用public修飾的
- 允許在接口中定義類方法创泄,但必須使用static修飾艺玲,不能使用default修飾
- 接口類的成員變量默認(rèn)是使用public static final 修飾的
接口和抽象類的異同點(diǎn)
==相同點(diǎn)==
- 接口和抽象類都不能被實(shí)例化括蝠,位于繼承樹的頂端,用于被其他類實(shí)現(xiàn)和繼承
- 接口和抽象類都可以包含抽象方法饭聚,實(shí)現(xiàn)接口或繼承抽象類的普通子類都必須實(shí)現(xiàn)這些抽象方法
==差別==
- 設(shè)計(jì)目的上
- 接口作為系統(tǒng)與外界交互的窗口忌警,接口體現(xiàn)的是一種規(guī)范,對(duì)于接口的實(shí)現(xiàn)者而言,接口規(guī)定了實(shí)現(xiàn)者必須向外提供哪些服務(wù)(以方法的形式來提供)法绵;對(duì)于接口的調(diào)用者來說箕速,接口規(guī)定了調(diào)用者可以調(diào)用哪些服務(wù),以及如何調(diào)用這些服務(wù)朋譬; 接口類制定了系統(tǒng)各模塊應(yīng)該遵循的標(biāo)準(zhǔn)盐茎,接口不應(yīng)該經(jīng)常被改變。一旦被改變徙赢,對(duì)整個(gè)系統(tǒng)都會(huì)有影響
- 抽象類作為系統(tǒng)中多個(gè)子類的共同父類字柠,體現(xiàn)的是一種模板式設(shè)計(jì)。
- 一個(gè)類最多只能有一個(gè)直接父類狡赐,包括抽象類窑业;但是可以直接實(shí)現(xiàn)多個(gè)接口
- 接口里面只能定義靜態(tài)常量,不能定義普通成員變量枕屉;抽象類中既能蒂尼靜態(tài)常量又能定義普通成員變量
- 接口里面不能有初始化代碼塊常柄;但是抽象類完全可以包含初始化塊
- 接口里面只能包含抽象方法、靜態(tài)方法搀擂、默認(rèn)方法西潘,不能為普通方法提供方法實(shí)現(xiàn);抽象類則完全可以包含普通方法
- 接口里不包含構(gòu)造器哨颂;抽象類可以包含構(gòu)造器秸架,抽象類里的構(gòu)造器并不是用于創(chuàng)建對(duì)象,而是讓其子類調(diào)用這些構(gòu)造器來完成抽象類完成屬于抽象類的初始化操作
后記
參考《瘋狂Java講義》