Java中public,private,final,static等概念的解讀

做爲剛入門Java的小白,對於public,private,final,static等概念老是搞不清楚,到底都表明着什麼,這裏作一個簡單的梳理,和你們分享,如有錯誤請指正,謝謝~html

訪問權限修飾符java

public和private是訪問權限修飾符,用於控制外界對類內部成員的訪問。
public:代表對象成員是徹底共有的,外界能夠隨意訪問。
private:代表對象成員是徹底私有的,不允許外界的任何訪問。ide

具體關於public,private的內容請移步:Java對象成員的封裝,  進一步有關protected的內容請移步:Java繼承函數

 

類成員變化修飾符spa

static和final是控制類成員變化的修飾符。code

static:靜態成員修飾符,其修飾的靜態變量脫離具體對象獨立存在,在內存中以後一份拷貝,全部的對象都公用這一個存儲空間,因此對static修飾的靜態變量進行的修改對該類的全部對象都起做用。static修飾的靜態函數表明全部對象的統一操做,只能調用靜態變量。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。htm

final:final用來修飾方法和屬性表示特殊的意義。修飾方法時表示方法不能被重寫;修飾屬性時表示屬性不能被改變,這裏屬性又分爲對象和基本類型,修飾基本類型表示基本類型賦值之後不能再被賦值,修飾對象表示這個屬性不能再指向其餘對象(引用不變),可是他指向的這個對象自己仍是能夠被改變的。對象

既然final方法不可重寫,那下面這段程序是否有錯呢?blog

 

class Base {
    private final void method() {
        System.out.println("In Base...");
    }
}
class Sub extends Base {
    public void method() {
        System.out.println("In Sub...");
    }
}        

答案: 正確的繼承

使用final關鍵字能夠聲明類、成員變量和成員方法,一經聲明,便不可繼承、不可修改和不能覆蓋。

本例中,基類方法 是private ,他在子類中是不可見的,故子類中的 同名方法 再也不是覆蓋,至關於一個新的方法名

這種狀況比較特殊,書上說 若是子類中的一個方法與它超類中的方法有相同的方法名和參數簽名,稱子類中的方法覆蓋(override)超類中的方法。 這種說法是不嚴密的。

額外小知識:

final方法不能被子類覆蓋。編譯器在調用final方法時會轉入內嵌機制(直接將方法主體插入到調用處),大大提升執行效率(50%左右)。API類中的許多方法,如Object類中的getClass方法爲final方法。
說明:final不能用於修飾構造方法

相關文章
相關標籤/搜索