先说结论:
父类中“this” 指向问题
“this.字段”如果出现在父类代码中,指的就是父类属性。
“this.方法”不管出现在父类还是子类代码中,指的都是子类方法。
“this.字段”如果出现在子类代码中,指的就是子类属性。
当this.方法的时候调用的都是子类的重写方法,但是this.属性的情况:子类继承了父类,并定义了父类中的同名属性,但是没有重写父类中调用该属性的方法,此时子类执行这个从父类继承来的方法会显示调用的是父类的属性。
在网上找了不少的资料其中有一个比较精辟:
不管是子类或者父类中的this,这个this只是指代的是new出来的实例,父类中this.方法就指代的是子类中的方法。
但是对于属性来说父类的this.属性就是指代的是父类的属性。为什么?我又查了资料,问题就出在加载的时候了,要知道创建子类实例的时候会先使用父类的构造器所以就先加载了父类中的属性和方法,在加载父类中方法的时候,里面的属性其实都是确定的,就是父类中的属性(因为子类还没加载)所以最后会使用的是父类的属性。如果重写了该方法,那么调用的属性就是子类的了