В настоящее время я занимаюсь учебником вложенных классов от Oracle, а в части Shadowing у меня есть то, что я вообще не понимаю.Внутренняя переменная переменной экземпляра класса
Код второй строки исполнения methodInFirstLevel
, выводящий значение this.x
, но в основном методе, который мы уже передали в аргументе 23 параметру метода для нового экземпляра объекта. Так почему же это int x
от FirstLevel
еще до 1? Должно ли ключевое слово this
ссылаться на экземпляр объекта?
public class ShadowTest {
public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel (int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
public static void main(String[] args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel f1 = st.new FirstLevel();
f1.methodInFirstLevel(23);
}
}
Выход:
x = 23
this.x = 1
ShadowTest.this.x = 0
Почему вы ожидаете 'this.x' быть' 23'? Нет, где в 'methodInFirstLevel' вы присваиваете' this.x = x'; – user2718281
Здесь есть три результата (которые вы не указали - пожалуйста, отредактируйте код с образцом вывода) - мне совершенно не ясно, какую строку вывода вы путаете. 'this.x' относится к' FirstLevel.x', поэтому имеет значение 1. 'ShadowTest.this.x' относится к' x' в экземпляре 'ShadowTest', поэтому оно равно 0. –
@ user2341963 спасибо mate now Я знаю, что моя ошибка приветствует. – Scorpiorian83