java中什么是抽象
一.抽象類
在了解抽象類之前,先來(lái)了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒(méi)有具體的實(shí)現(xiàn)。抽象方法的聲明格式為:
abstract void fun();
抽象方法必須用abstract關(guān)鍵字進(jìn)行修飾。如果一個(gè)類含有抽象方法,則稱這個(gè)類為抽象類,抽象類必須在類前用abstract關(guān)鍵字修飾。因?yàn)槌橄箢愔泻袩o(wú)具體實(shí)現(xiàn)的方法,所以不能用抽象類創(chuàng)建對(duì)象。
下面要注意一個(gè)問(wèn)題:在《JAVA編程思想》一書(shū)中,將抽象類定義為“包含抽象方法的類”,但是后面發(fā)現(xiàn)如果一個(gè)類不包含抽象方法,只是用abstract修飾的話也是抽象類。也就是說(shuō)抽象類不一定必須含有抽象方法。個(gè)人覺(jué)得這個(gè)屬于鉆牛角尖的問(wèn)題吧,因?yàn)槿绻粋€(gè)抽象類不包含任何抽象方法,為何還要設(shè)計(jì)為抽象類?所以暫且記住這個(gè)概念吧,不必去深究為什么。
[public] abstract class ClassName {
abstract void fun();
}
從這里可以看出,抽象類就是為了繼承而存在的,如果你定義了一個(gè)抽象類,卻不去繼承它,那么等于白白創(chuàng)建了這個(gè)抽象類,因?yàn)槟悴荒苡盟鼇?lái)做任何事情。對(duì)于一個(gè)父類,如果它的某個(gè)方法在父類中實(shí)現(xiàn)出來(lái)沒(méi)有任何意義,必須根據(jù)子類的實(shí)際需求來(lái)進(jìn)行不同的實(shí)現(xiàn),那么就可以將這個(gè)方法聲明為abstract方法,此時(shí)這個(gè)類也就成為abstract類了。
包含抽象方法的類稱為抽象類,但并不意味著抽象類中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變量和普通的成員方法。注意,抽象類和普通類的主要有三點(diǎn)區(qū)別:
1)抽象方法必須為public或者protected(因?yàn)槿绻麨閜rivate,則不能被子類繼承,子類便無(wú)法實(shí)現(xiàn)該方法),缺省情況下默認(rèn)為public。
2)抽象類不能用來(lái)創(chuàng)建對(duì)象;
3)如果一個(gè)類繼承于一個(gè)抽象類,則子類必須實(shí)現(xiàn)父類的抽象方法。如果子類沒(méi)有實(shí)現(xiàn)父類的抽象方法,則必須將子類也定義為為abstract類。
在其他方面,抽象類和普通的類并沒(méi)有區(qū)別。
java中什么是抽象
下一篇:java中什么是單例