关于Java继承体系中this的表示关系

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 "子类调用";
    }
}

运行结果:

以上代码实验结果即可证明其论证;

猜你喜欢

转载自www.cnblogs.com/YangGC/p/9026170.html
今日推荐