2017-01-07 19 views
0

我嘗試編寫簡單的程序,該程序可與嵌套類一起使用。我注意到,該嵌套類不能改變(或我做了錯誤的)封閉類領域:嵌套類不會更改封閉類字段

public class MyClass { 

    private boolean bool = false; 
    private NestedClass nestedClass = new NestedClass(); 

    private class NestedClass { 

     private void print(){ 
       System.out.println(bool); 
     } 

     NestedClass(){ 
      bool = !bool; 
     } 
} 

    MyClass(){ 
     nestedClass = new NestedClass(); 
    } 

    public void getInfo(){ 
     nestedClass.print(); 
    } 
} 

MyClass新實例的創建後,bool的值不會改變:

public static void main(String[] args) { 
    MyClass myClass = new MyClass(); 
    myClass.getInfo(); 
} 

輸出是false。但我預計true。 我做錯了什麼?

+2

您正在調用'NestedClass'構造函數兩次,所以它會兩次更改'bool''false - > true - > false'的值。您可以將sysout添加到'NestedClass'構造函數中來查看。 –

回答

2

我猜是這樣,你仍然看到布爾值爲false的原因是因爲它設置了兩次(否定兩次)。

一旦這裏

private NestedClass nestedClass = new NestedClass(); 

和第二次

MyClass(){ 
    nestedClass = new NestedClass(); 
} 

兩個呼叫NestedClass的構造器兩次該取消它兩次造成false - >true - >false