我想對(duì)于每個(gè)Java程序員來(lái)說(shuō),接口都不陌生,接口中的方法也經(jīng)常使用。而接口中的成員變量,就顯得用得少一點(diǎn),
而對(duì)于成員變量為什么必須聲明為public static final,可能就更不清楚了,而且我覺得大多數(shù)不清楚為什么要用
static 和 final。下面我們就來(lái)解釋一下。
一、為什么要用final?
首先,我們應(yīng)該明白一個(gè)問(wèn)題。接口,實(shí)際上比抽象類更加抽象,它是最高層次的抽象。接口中的所有方法都是抽象方法,不會(huì)有任何實(shí)現(xiàn)方面的代碼,而它
的具體實(shí)現(xiàn)是要靠實(shí)現(xiàn)這個(gè)接口的具體類來(lái)具體實(shí)現(xiàn)的。而且,這個(gè)接口中的方法是不可更改的。同樣的,接口中的變量也是不可更改的。所以,要聲明為
final。
接口是一種協(xié)議,協(xié)議是所有實(shí)現(xiàn)接口的類都必須遵守的。如果變量不是final,那么每個(gè)實(shí)現(xiàn)接口的類就可以更改這個(gè)變量的值,也就違反了OCP原則。
二、為什么要用static?
至于這個(gè)問(wèn)題,是和Java語(yǔ)
言的本身機(jī)制有關(guān)。我們知道Java不支持多繼承,但是一個(gè)類可是現(xiàn)實(shí)多個(gè)接口。我們假設(shè)有兩個(gè)接口A和B,而類C實(shí)現(xiàn)了接口A和B。假設(shè),此時(shí),A和B
中都有一個(gè)變量N,如果N不是static類型的,那么在C中該如何區(qū)分N到底是A的還是B的呢?而,如果是static類型的,我們可以通過(guò)A.N和
B.N來(lái)區(qū)別調(diào)用A或者B中的成員變量N。
出處來(lái)自http://blog.csdn.net/qiumengchen12/article/details/44852023#