Java的继承体系中,因为有重写的概念,所以说this在子父类之间的调用到底是谁的方法,或者成员属性,的问题是一个值得思考的问题;
先说结论:如果在测试类中调用的是子父类同名的成员属性,这个this.成员 属性的值就是父类中这个成员属性的值,因为在Java中没有重写成员属性这一概念
,如果调用的是同名的成员方法的话,那就应该调用的是重写后的成员方法.....如果子类中没有这个成员方法,则向父类中寻找.
上代码支持论证:
package Test_This; public class Demo { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num);//这里定义的是父类,而成员变量没有多态,所以即使你new的子类,依然指向父类的成员变量。 System.out.println(f.fun1());//不解释了,就是多态。 f.show(); } } class Fu { public String num = "父类成员变量"; public void show() { System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。 System.out.println(this.fun1());//因为方法有多态,所以this指向new对象的方法。 } public String fun1() { System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。 return "父类调用"; } } class Zi extends Fu { public String num = "子类成员变量"; public String fun1() { System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。 return "子类调用"; } }
运行结果:
以上代码实验结果即可证明其论证;