Задать вопрос

Почему при обращении из локального класса к переменной окружающего класса, после её явной инициализации показывает её как null?

Почему при обращении из локального класса к переменной окружающего класса, после её инициализации с помощью вызова конструктора окружающего класса из конструктора локального класса, показывает её значение установленное по умолчанию?

interface ITest{
  void getName();
}

class Test{
    private String name;

    Test(String name) {
        this.name=name;
    }
    Test() { }

        public ITest setName(String name1){
           class Test1 extends Test implements ITest{
               Test1 (String name1) {
                   super(name1);
              }
              @Override
              public void getName(){
                 System.out.println(name);
             }
         }
        return new Test1(name1);
    }
}


public class Main {

    public static void main(String[] args) {
		Test test= new Test();// Запустится конструктор без параметров, name станет null.
		ITest itest= test.setName("Имя"); // Здесь конструктор с параметром, установит переменной name значение "имя";
		itest.getName(); // она все еще null.

	}
}

Вывод: null
Изначально запустится конструктор без параметров, name станет null.
Почему null ведь должен сработать конструктор локального класса и вызвать конструктор родителя с параметром где переменной окружающего класса задастся значение "Имя" ???
  • Вопрос задан
  • 332 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
lxsmkv
@lxsmkv
Test automation engineer
System.out.println(super.name);
Ответ написан
@odissey_nemo
Программист, ГИС-системы, растры, космоснимки
Всё логично, хотя и запутано. Устанавливается переменная одного класса (Test), а считывается другого (Test1).
Если в main вызвать itest.setName("Имя2"), то itest.getName() напечатает "Имя2" :o)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы