2013-06-29 49 views
4

我遇到了一個相當奇怪的行爲,並不確定這是Java問題還是Eclipse的某些情況。Java - 類方法可以看到相同類參數的私有字段

看看下面的代碼:

class Foo { 
    private String text; 

    public void doStuff(Foo f) { 
    System.out.println(f.text); 
    } 
} 

這裏的問題是,爲什麼是f.text訪問?這是一個私人領域,所以按照我的邏輯,這不應該是,但IDE似乎認爲它是。

+0

可能的重複[爲什麼克隆可以在另一個對象上設置私人字段?](http://stackoverflow.com/questions/976243/why-can-clone-set-a-private-field-on-another-對象) –

+0

[在Java中,public,default,protected和private之間的區別是什麼?](http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public -default-protected-and-private) –

+0

基本上,不要認爲一種語言的規則適用於另一種語言。相反,請學習您使用的語言的規則。在這種情況下,請查看Java語言規範對「private」的含義所說的內容。 –

回答

12

這是設計。即使在不同的實例中,私有字段也可以在同一類中訪問,即。請參閱here瞭解更多詳情,以及甲骨文就此發佈的官方聲明。由於doStuffFoo的成員,因此可以訪問Foo的任何私人字段。

私人修飾符指定了構件只能在其自己的類 [即使從不同的實例]來訪問。 [重點礦山]

現在,下面的代碼示例確實工作由於text的能見度改性劑:

class Bar{ 
    public int baz; 
    public void doMoreStuff(Foo f){ 
    System.out.println(f.text); 
    } 
} 

因爲doMoreStuff在Bar,不Foo限定。

+0

這很有道理!鏈接的頁面實際上並沒有添加[]中的位,但我想這就是「它自己的類」的含義。感謝你的回答。 – Marconius

相關問題