1. 程式人生 > >Java介面中的成員變數為什麼必須宣告為public static final?

Java介面中的成員變數為什麼必須宣告為public 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。