這個問題要從實際的邏輯角度去看的,首先要了解abstract,static,synchronized,native這些關鍵字干什么用的。
abstract是抽象的,指的是方法只有聲明而沒有實現,他的實現要放入聲明該類的子類中實現。
static是靜態的,是一種屬於類而不屬於對象的方法或者屬性,而我們知道,類其實也是一個對象,他是在class文件加載到虛擬機以后就會產生的對象,通常來說它是單利的,就是整個虛擬機中只有一個這樣的類對象(當然,如果用新的類加載器也會生成新的類的對象)。
synchronized 是同步,是一種相對線程的鎖。
native 本地方法,這種方法和抽象方法及其類似,它也只有方法聲明,沒有方法實現,但是它與抽象方法不同的是,它把具體實現移交給了本地系統的函數庫,而沒有通過虛擬機,可以說是java與其它語言通訊的一種機制。
那么我們就來談談這些關鍵字為什么不能和abstract混用。
首先abstract與static,其實一看他們的作用和屬性就很容易辨別,abstract是沒有實現的,而static一定要有實現,因為abstract的類不能生產對象,但是static是屬於類,而類已經是一個存在的對象,這兩個關鍵字在這上面有一個關鍵的矛盾點。
synchronized 是同步,然而同步是需要有具體操作才能同步的,如果像abstract只有方法聲明,那同步一些什么東西就會成為一個問題了,當然抽象方法在被子類繼承以后,可以添加同步。
native,這個東西本身就和abstract沖突,他們都是方法的聲明,只是一個吧方法實現移交給子類,另一個是移交給本地操作系統。如果同時出現,就相當於即把實現移交給子類,又把實現移交給本地操作系統,那到底誰來實現具體方法呢?
