我想對於每個Java程序員來說,接口都不陌生,接口中的方法也經常使用。而接口中的成員變量,就顯得用得少一點,而對於成員變量為什么必須聲明為public static final,
可能就更不清楚了,而且我覺得大多數不清楚為什么要用 static 和 final。下面我們就來解釋一下。
一、為什么要用final?
首先,我們應該明白一個問題。接口,實際上比抽象類更加抽象,它是最高層次的抽象。接口中的所有方法都是抽象方法,不會有任何實現方面的代碼,而它的具體實現是要靠實現這個接口的具體類來具體實現的。而且,這個接口中的方法是不可更改的。同樣的,接口中的變量也是不可更改的。所以,要聲明為final。
接口是一種協議,協議是所有實現接口的類都必須遵守的。如果變量不是final,那么每個實現接口的類就可以更改這個變量的值,也就違反了OCP原則。
二、為什么要用static?
至於這個問題,是和Java語言的本身機制有關。我們知道Java不支持多繼承,但是一個類可是現實多個接口。我們假設有兩個接口A和B,而類C實現了接口A和B。假設,此時,A和B中都有一個變量N,如果N不是static類型的,那么在C中該如何區分N到底是A的還是B的呢?而,如果是static類型的,我們可以通過A.N和B.N來區別調用A或者B中的成員變量N。