2017-01-07 10 views
0

중첩 클래스와 함께 작동하는 간단한 프로그램을 작성하려고합니다. 내가 클래스 필드 둘러싸는 중첩 된 클래스는 변경할 수 없습니다,주의 (또는 내가 실수 한) 한 : MyClass의 새로운 인스턴스의 생성 한 후중첩 클래스 do not 변경 동봉 클래스 필드

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(); 
    } 
} 

bool의 값은 변경되지 않습니다

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

출력은 false입니다. 그러나 나는 true을 기대했다. 내가 뭘 잘못 했니?

+2

'NestedClass' 생성자를 두 번 호출하므로'bool'' false -> true -> false' 값을 두 번 변경합니다. 이것을보기 위해'NestedClass' 생성자에 sysout을 추가 할 수 있습니다. –

답변

2

나는 bool의 값이 false로 표시되는 이유는 그 값이 두 번 설정되기 때문입니다 (두 번 부정됩니다). 일단 여기

private NestedClass nestedClass = new NestedClass(); 

와 두 번째

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

모두가 두 번 false 결과 부정하는 배 NestedClass의 생성자를 호출 ->true ->false.