Java中关于对this和super的理解详解

该博客通过代码示例详细分析了Java中的继承和super关键字。文章指出,子类对象的this引用指向子类实例,而super引用则指向父类的可继承属性和方法。在子类没有定义相同属性时,this和super引用指向相同,表明子类继承了父类的属性和方法。同时,文章强调了super调用父类构造器和成员的重要性,并通过运行结果验证了这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上图
在这里插入图片描述
上代码
首先对类进行一个简要的介绍
A(父类)
包含属性name和age并带有默认值
B(子类1)
包含属性name和age没有默认值
C(子类2)
没有任何属性完全继承自父类

package ThisAndSuper;

public class A {
        String name="父类默认name";
        int age=0;

        public void test() {
            System.out.println("我是父类的test()方法");
            System.out.println("父类中的toString=====》"+this.toString());
            System.out.println("父类姓名=" + this.name + " 父类年龄=" + this.age);
        }
}

package ThisAndSuper;

public class B extends A{
    String name;
    int age;

    public void test() {
        super.test();
        System.out.println("super.name="+super.name);
        System.out.println("子类B的test()方法");
        System.out.println("子类B中的toString=====》"+this.toString());
        System.out.println("子类B姓名=" + this.name + " 子类B年龄=" + this.age);
    }

}

package ThisAndSuper;


public class C extends A{
    
    public void test() {
        super.test();
        System.out.println("子类C的test()方法");
        System.out.println("子类C中的toString=====》"+this.toString());
        System.out.println("子类c姓名(this)=" + this.name + " 子类c年龄(this)=" + this.age);
        System.out.println((this.name==super.name)&&(this.age==super.age));
    }
    public static void main(String[] args) {
       B b = new B();
       C c = new C();
       b.name="bname";
       b.age=10;
       b.test();
       c.test();
    }
}

运行结果
在这里插入图片描述

从运行结果来分析
1.A和B与A和C中的this的toString结果分别都是一样的,证明了父类和子类中的this是同一个this,也就是在Main中实例化的B对象b和实例化的C对象c。
2.由于this的toString结果分别一致,所以也证明了super并没有构造父类对象,super可以 . 出test()和name并且name的属性值也是父类中默认的属性值,也证实了super指向父类中可继承的变量和父类中可继承的方法。
2.A和B属性的输出结果不一致,A中输出的结果为父类中默认的属性值而子类输出的结果为子类自己实例化的属性值,证明了在父类和子类中this的指向不同,子类中指向的是子类成员变量和子类成员方法,父类中指向的是父类可继承成员变量和父类可继承成员方法。
3.A和C中属性输出的结果是一致的并且代码中对this.name和this.age与super.name和super.age的比较结果返回值为true,这证明了在子类并没有自己声明属性时,子类中的this指向的是父类中可继承的属性和父类中可继承的方法。
注(本文中第一张图片来源于网络,如涉及侵权请联系删除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值