2017-01-07 6 views
0

Я пытаюсь написать простую программу, которая работает с вложенным классом. Я заметил, что вложенный класс не может изменить (или я сделал ошибку) ограждающим поле класса:Вложенные классы doen't меняют класс окружения

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 «s не меняет:

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

Выход false. Но я ожидал true. Что я сделал не так?

+2

Вы дважды вызываете конструктор 'NestedClass', поэтому он будет дважды изменять значение' bool' 'false -> true -> false'. Вы можете добавить sysout в конструктор 'NestedClass', чтобы это увидеть. –

ответ

2

Я предполагаю, что это так, причина, по которой вы все еще считаете значение bool ложным, состоит в том, что его получение задано дважды (дважды отрицается).

После того, как здесь

private NestedClass nestedClass = new NestedClass(); 

и второй раз

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

И вызвать конструктор NestedClass дважды, который сводит на нет его в два раза в результате false ->true ->false.

 Смежные вопросы

  • Нет связанных вопросов^_^