2011-07-28 51 views
1

這是問題的後續問題:"java access modifiers and overriding"。前者通常處理Java方法。爲什麼Java領域的靈活性?我們可以通過他們對繼承階級的尊重來縮小或擴大知名度,而不能採用「重寫」或「隱藏」方法。訪問修飾符和隱藏Java字段

+0

請發佈一個鏈接到該問題 – adarshr

+0

字段沒有被覆蓋。他們只是隱藏起來。 – Kal

+0

謝謝adarshr http://stackoverflow.com/questions/6851612/java-access-modifiers-and-overriding – yesilupper

回答

3

你從來沒有覆蓋字段開始 - 你是總是隱藏它們。字段是不是多態......換句話說,如果你寫:

Superclass x = new Subclass(); 
System.out.println(x.field); 

兩者SuperclassSubclass聲明場稱爲field,它將始終使用超一個,無論如何,因爲這是所有的編譯器可以看到」。

個人而言,我儘量保持我的私有變量反正...

+0

這是我在* .net中愛*屬性的衆多原因之一 - 它們看起來和感覺像是字段,但仍然可以是多態。 –

3

爲什麼用java領域

你不能在其他類中的字段去私人通過擴展它的靈活性。當你在一個子類中創建一個新字段時,你只是隱藏了超類字段。

class Base { 
    protected int x; 
} 

class Ext extends Base { 
    private int x; // not the same as Base.x 
} 
+0

當然,您可以創建一個私人的字段。我認爲你的意思是你不能通過在子類中提供一個私有字段來改變基類中字段的訪問權......但是我建議你澄清你的答案。 –

+0

Ups,已更新! :) – dacwe