Рассмотрим:
class TestParent{
public int i = 100;
public void printName(){
System.err.println(this); //{[email protected]} according to the Debugger.
System.err.println(this.i); //this.i is 100.
}
}
class TestChild extends TestParent{
public int i = 200;
}
public class ThisTest {
public static void main(String[] args) {
new TestChild().printName();
}
}
Я знаю, что были заданы подобные вопросы, но я не смог получить четкое представление о переменной 'this' в Java.
Позвольте мне объяснить, как я понимаю результат вышеупомянутого изображения.
-
Поскольку объект
new TestChild()
, вызывающий методprintName()
, переменнаяthis
в строке 6 устанавливается в объектTestChild
- {TestChild @428} в соответствии с отладчиком. -
Однако, поскольку Java не имеет виртуального поля - я не совсем уверен, что это значит, но я концептуально понимаю это как противоположность Java-методам, которые поддерживают Полиморфизм -
this.i
до 100 изTestParent
во время компиляции. -
Итак, независимо от того, что
this
,this.i
в методеTestParent
всегда будет переменнойi
в классеTestParent
.
Я не уверен, что мое понимание правильное, поэтому, пожалуйста, исправьте меня, если я ошибаюсь.
А также, мой главный вопрос:
Как переменная this
установлена на текущий объект, вызывающий метод? Как это реализовано?