Java继承中的“this”关键字如何工作?

在下面的代码片段中,结果真的令人困惑。

public class TestInheritance {
    public static void main(String[] args) {
        new Son();
        /*
        Father father = new Son();
        System.out.println(father); //[1]I know the result is "I'm Son" here
        */
    }
}

class Father {
    public String x = "Father";

    @Override
    public String toString() {
       return "I'm Father";
    }

    public Father() {
        System.out.println(this);//[2]It is called in Father constructor
        System.out.println(this.x);
    }
}

class Son extends Father {
    public String x = "Son";

    @Override
    public String toString() {
        return "I'm Son";
    }
}

结果是

I'm Son
Father

为什么“这个”指向父建设者中的儿子,但“this.x”指向父亲中的“x”字段。 “这个”关键字如何工作?

我知道多态概念,但在[1]和[2]之间不会有差异?当新的Son()被触发时,记忆中发生了什么?

默认情况下,所有成员函数都是Java中的多态。这意味着当你调用this.toString()Java使用动态绑定来解决调用,调用子版本。当您访问成员x时,您访问当前范围(父亲)的成员,因为成员不是多态的。
http://stackoverflow.com/questions/23055354/how-does-the-this-keyword-in-java-inheritance-work

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java继承中的“this”关键字如何工作?