Java this和super的理解

this
this的含义
this代表当前对象的引用。
this使用位置
this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁。
this在非静态实例方法中:表示调用该方法的对象,即谁在调用,this就代表谁。
this不能出现在静态代码块和静态方法中。
this使用格式
this.成员变量名
当方法的局部变量与当前对象的成员变量重名时,就可以在成员变量前面加this.,如果没有重名问题,就可以省略this。
this.成员变量会先从本类声明的成员变量列表中查找,如果未找到,会去从父类继承的在子类中仍然可见的成员变量列表中查找。
this.成员方法
调用当前对象的成员方法时,都可以加"this.",也可以省略,实际开发中都省略。
当前对象的成员方法,先从本类声明的成员方法列表中查找,如果未找到,会去从父类继承的在子类中仍然可见的成员方法列表中查找。
this()或this(实参列表)
只能调用本类的其他构造器。
必须在构造器的首行。
如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(【实参列表】)",否则会发生递归调用死循环。

super
super的含义
super是用于在当前类中访问父类的一个特殊关键字,不是对象的引用。(区别this :super不能单独使用赋值给一个变量)。
super使用的前提
通过super引用父类的xx,都是在子类中仍然可见的。
不能在静态代码块和静态方法中使用super。
super的使用格式
super.成员变量:在子类中访问父类的成员变量,特别是当子类的成员变量与父类的成员变量重名时。

就近原则和追根溯源原则:

1、找变量
没有super和this
在构造器、代码块、方法中如果出现使用某个变量,先查看是否是当前块声明的局部变量,
如果不是局部变量,先从当前执行代码的本类去找成员变量
如果从当前执行代码的本类中没有找到,会往上找父类的(非private,跨包还不能是缺省的)
this :代表当前对象
通过this找成员变量时,先从当前执行代码的本类中找,没有的会往上找父类的(非private,跨包还不能是缺省的)。
super :代表父类的
通过super找成员变量,直接从当前执行代码所在类的父类找
super()或super(实参列表)只能从直接父类找
通过super只能访问父类在子类中可见的(非private,跨包还不能是缺省的)
注意:super和this都不能出现在静态方法和静态代码块中,因为super和this都是存在于对象中的
2、找方法
没有super和this
先从当前对象(调用方法的对象)的本类找,如果没有,再从直接父类找,再没有,继续往上追溯
this
先从当前对象(调用方法的对象)的本类找,如果没有,再从父类继承的可见的方法列表中查找
super
直接从当前对象(调用方法的对象)的父类继承的可见的方法列表中查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值