2013-10-10 66 views
-2
class TestPrivate2 { 
private int n; 
} 

public class TestPrivate { 

private int n; 

public void accessOtherPrivate(TestPrivate other) { 
    other.n = 10;// can use other class's private field,why?????????? 
    System.out.println(other.n); 
} 

public void accessOtherPrivate(TestPrivate2 other) { 
//  other.n = 10;//can not access,i konw 
//  System.out.println(other.n);// 
} 
public static void main(String[] args) { 
    new TestPrivate().accessOtherPrivate(new TestPrivate()); 
} 

} 

看看TestPrivate的方法:accessOtherPrivate.why它可以使用其他類的私有領域 爲什麼呢?類訪問其他類的私有領域

+2

什麼?它沒有訪問其他班級的字段。它正在訪問同一個類的實例上的字段。 –

+0

因爲這就是Java語言的定義。 –

+1

因爲這就是java的工作原理,請查看[訪問修飾符](http://javapapers.com/core-java/access-modifiers-in-java-explain/) –

回答

3

它不訪問另一個的字段。它訪問另一個對象,與相同的私有字段。

在Java中,您不能訪問其他類的私有字段,因爲您不應該知道它們是如何在內部工作的。但是你仍然可以訪問同一個類中其他對象的私有字段。

0

因爲它們是同一個班級。一個對象可以引用它自己的類的私有字段。

順便說一句,你的TestPrivate2類只是混淆了這個問題,是不相關的。

2

private字段對於特定實例是私有的,這是一個常見的誤解。不。這是特定的class

Oracle Access Control Tutorial

在成員級別,您還可以使用公共改性劑或無 修飾符(包私營)剛剛與頂級類,並與 相同的含義。對於成員,還有兩個額外訪問修改器:private和protected。 專用修飾符指定 該成員只能在其自己的類中訪問。

0
public void accessOtherPrivate(TestPrivate other) 

您正在訪問的同一類TestPrivate的私人領域,它不是另一個類,這就是爲什麼它能夠前往N。