2015-08-29 52 views
0

我有一個代碼 -能見度內部類變量的

public class Hello 
{ 
    void create() 
    { 
     Inner obj=new Inner(); 
     obj.r=100; //Able to access private variable x 
     obj.display(); //displays 100 
    } 
    class Inner 
    { 
     private int r=45; 
     void display() 
     { 
      System.out.println("r is : "+r); 
     } 
    } 
    public static void main(String[] args) 
    { 
     Hello ob=new Hello(); 
     ob.create(); 
    } 
} 

在上面的代碼中,通過創建內部類的實例,我們能夠訪問該class.But這是所定義的專用變量不inheritance.Why的情況下,它是這樣的嗎?對於例如,在這個代碼 - 提前

class One 
{ 
    private int x; 
    void getData() 
    { 
     x=10; 
    } 
    void display() 
    { 
     System.out.println("x is : "+x); 
    } 
} 
class Two extends One 
{ 
    int y; 
    void putData() 
    { 
     One o=new One(); 
     o.x=13; //Error 
    } 
} 
public class File 
{ 
    public static void main(String[] args) 
    { 
     Two to=new Two(); 
     to.putData(); 
    } 
} 

背後是什麼確切的原因是什麼?謝謝...

+2

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

+4

很難想象除**以外的答案,因爲**這就是Java的實現方式。 –

+0

使用'protected'有什麼問題?應該在兩種情況下工作。 – puelo

回答

4

Java Language Specification

否則,如果成員或構造被聲明private,那麼訪問是當且僅當所述頂層類的主體內發生它(第7.6節),其包圍所述構件或構造函數的聲明中允許。

這意味着頂級類可以訪問它的嵌套類的私有成員。

或者說另一種方式:私人意味着私人的頂級類和所有它的嵌套類,而不是私有的嵌套類本身。