抽象類的概念
普通類是一個(gè)完善的功能類,可以直接產(chǎn)生實(shí)例化對(duì)象,并且在普通類中可以包含有構(gòu)造方法、普通方法、static方法、常量和變量等內(nèi)容。而抽象類是指在普通類的結(jié)構(gòu)里面增加抽象方法的組成部分。
什么叫抽象方法?
在所有的普通方法上面都會(huì)有一個(gè)"{}",這個(gè)表示方法體,有方法體的方法一定可以被對(duì)象直接使用。而抽象方法,是指沒(méi)有方法體的方法,同時(shí)抽象方法還必須使用關(guān)鍵字abstract做修飾
擁有抽象方法的類就是抽象類,抽象類要使用abstract關(guān)鍵字聲明。
定義一個(gè)抽象類
abstract class A {
public void fun(){
System.out.println("hello java!");
}
public abstract void print();//抽象方法,沒(méi)有方法體
}
抽象類的使用
抽象類無(wú)法直接進(jìn)行實(shí)例化操作。
原因:當(dāng)一個(gè)類實(shí)例化之后,就意味著這個(gè)對(duì)象可以可以調(diào)用類中的屬性或者方法了,但是在抽象類里存在抽象方法,而抽象方法沒(méi)有方法體,沒(méi)有方法體就無(wú)法進(jìn)行調(diào)用。既然無(wú)法進(jìn)行調(diào)用,就無(wú)法產(chǎn)生實(shí)例化對(duì)象。
抽象類的使用原則
1.抽象方法必須為public或者protected (因?yàn)槿绻麨閜rivate ,則不能被子類繼承,子類便無(wú)法實(shí)現(xiàn)該方法)。
2.抽象類不能直接實(shí)例化,需要依靠子類采用向上轉(zhuǎn)型的方式處理。
3.抽象類必須有子類,使用extends繼承,一個(gè)子類只能繼承一個(gè)抽象類
4.子類(如果不是抽象類)則必須覆寫(xiě)抽象類之中的全部抽象方法(如果子類沒(méi)有實(shí)現(xiàn)父類的抽象方法,則必須將子類也定義為abstract類)
抽象類的使用限制
1.抽象類中有構(gòu)造方法嗎?
由于抽象類里會(huì)存在一些屬性,那么抽象類中一定存在構(gòu)造方法,其存在目的是為了屬性的初始化。
并且子類對(duì)象實(shí)例化的時(shí)候,依然滿足先執(zhí)行父類構(gòu)造,再執(zhí)行子類構(gòu)造順序。
2.抽象類可以用final聲明嗎?
不能,因?yàn)槌橄箢惐仨氂凶宇悾鴉inal定義的類不能有子類
3.抽象類能否使用static聲明?
外部類不允許使用static聲明,而內(nèi)部類的抽象運(yùn)行使用static聲明。使用static聲明的內(nèi)部抽象類相當(dāng)于一個(gè)外部抽象類,繼承的時(shí)候使用“外部類.內(nèi)部類”的形式表示類名稱。
4.可以直接調(diào)用抽象類中的static聲明的方法嗎?
任何時(shí)候,如果要執(zhí)行類中的static方法的時(shí)候,都可以再?zèng)]有對(duì)象的情況下直接調(diào)用,對(duì)于抽象類也一樣。