面向对象——this和super

目录

 

this的原理

super的两个用法

关于this和super的总结

this跟super调用图解


this的原理

哪个对象调用了this所在函数(包含this的函数,this一般都在方法内部调用),那么this就代表哪个对象(这时候在压栈的函数中this会把对象引用所对用的地址值拿过来,跟对象引用名指向堆内存中的具体对象)

this的两个用法

A: 区分成员变量和局部变量

this对象后面跟上.调用的是本类的成员属性和成员方法(一般方法),更多的时候用在成员变量与局部变量重名时

B: 调用本类构造方法

this对象后面跟上()调用的是本类中的对应参数的构造函数。在构造方法的第一行调用,且只能调用一次,少参数的构造方法也可以调用多参数的构造方法,只是多出的参数写死就是了

super的两个用法

A:区分子类成员还是父类成员

当子类与父类中的成员变量或者成员方法重名时,用super来区分是去调用哪一个

B:调用父类的构造函数

super可以在子类构造函数中调用父类的构造函数(至于调用哪一个,要看super里面写的参数),每一个子类的构造函数第一行默认调用的是父类中空参的构造函数

关于this和super的总结

关于this和super,我们可以这样理解,当一个类不存在继承时,他只有this关键字代表一个本类对象的引用(可以说是地址),那么当存在子父类关系时,这时候子类的权利就变大了,他拥有了两个关键字,this与super,他们分别指向子父类的一个引用,所以在子类中调用super.成员变量和方法就相当于调用这个地址指向的变量与方法(可能在内存中的展示不是这样,但是这样理解起来简单),如果在子类构造函数中调用了this指代的其他子类函数,则不会再去调用父类空参的构造方法super(),因为两个调用都要在第一行,相冲突

this跟super调用图解

  1. 首先将代码加载进方法区,而子的class文件会有一个父的class文件引用
  2. Main方法开始执行,在堆中创建子类对象,如图所示,父类内容嵌套在子类内容里面
  3. 执行show方法,分别打印了局部变量,子类num成员变量,父类num成员变量
  4. 执行子类的method方法,而子类的method方法中盗用了super.method父类方法,这时候父类method方法又进栈,等执行完毕,按照父method,子method,show,main的顺序弹栈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值