abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
abstract是抽象的意思,指的是方法只有聲明而沒有實(shí)現(xiàn),他的實(shí)現(xiàn)要放入聲明該類的子類中實(shí)現(xiàn)。
static是靜態(tài)的意思,是一種屬于類而不屬于對象的方法或者屬性。
synchronized是同步的意思,是一種相對線程的鎖。
native是本地方法的意思,這種方法和抽象方法及其類似,它也只有方法聲明,沒有方法實(shí)現(xiàn),但是它與抽象方法不同的是,它把具體實(shí)現(xiàn)移交給了本地系統(tǒng)的函數(shù)庫,而沒有通過虛擬機(jī),可以說是Java與其它語言通訊的一種機(jī)制。
那么我們就來談?wù)勥@些關(guān)鍵字為什么不能和abstract混用。
首先abstract與static,聲明static說明可以直接用類名調(diào)用該方法;聲明abstract說明需要子類重寫該方法;如果同時聲明static和abstract,用類名調(diào)用一個抽象方法肯定不行。
synchronized 是同步,然而同步是需要有具體操作才能同步的,如果像abstract只有方法聲明,那同步一些什么東西就會成為一個問題了,當(dāng)然抽象方法在被子類繼承以后,可以添加同步。
native本身就和abstract沖突,他們都是方法的聲明,只是一個把方法實(shí)現(xiàn)移交給子類,另一個是移交給本地操作系統(tǒng)。如果同時出現(xiàn),就相當(dāng)于既把實(shí)現(xiàn)移交給子類,又把實(shí)現(xiàn)移交給本地操作系統(tǒng),那到底誰來實(shí)現(xiàn)具體方法呢!
不能放在一起的修飾符:final和abstract,private和abstract,static和abstract,因?yàn)閍bstract修飾的方法是必須在其子類中實(shí)現(xiàn)(覆蓋),才能以多態(tài)方式調(diào)用,以上修飾符在修飾方法時期子類都覆蓋不了這個方法,final是不可以覆蓋,private是不能夠繼承到子類,所以也就不能覆蓋,static是可以覆蓋的,但是在調(diào)用時會調(diào)用編譯時類型的方法,因?yàn)檎{(diào)用的是父類的方法,而父類的方法又是抽象的方法,又不能夠調(diào)用,所以上的修飾符不能放在一起。