考虑:
class TestParent{
public int i = 100;
public void printName(){
System.err.println(this); //{TestChild@428} 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();
}
}
我知道有人问过类似的问题,但我无法深入理解 Java 中的“this”变量。
让我试着解释一下我是如何理解上图的结果的。
由于它是
new TestChild()
调用该printName()
方法的对象,因此根据调试器this
,第 6 行中的变量被设置为一个对象 - {TestChild@428}。TestChild
但是,由于 Java 没有虚拟字段——我不完全确定这意味着什么,但我从概念上理解它与支持多态的 Java 方法相反——在编译时
this.i
设置为 100 。TestParent
所以不管是什么
this
,方法this.i
中的变量TestParent
总是类中的。i
TestParent
我不确定我的理解是否正确,所以如果我错了,请纠正我。
而且,我的主要问题是,
变量如何this
设置为调用该方法的当前对象?它是如何实际实施的?