文章目录
this的用法
super的用法
对比和总结
一、this的用法
this是在一个类当中作为一个隐式对象存在,所谓隐式就是说:这个对象不用显式声明,在类内部自带,可以直接使用,所以也是一个关键字;
它的含义是在类的内部代表当前操作对象。
用法1、this.
通常在代码中访问本类的属性或者方法行为时,在属性名或方法名前面加this. ;当在一个方法当中,局部变量和属性变量出现了重名的情况,那么根据就近原则 JVM会认为这个名字代表的是该方法中的局部变量名,所以需要给前面的属性变量名加this.指明。
使用 this. 还有两个好处:
第一是 this. 只能调用到本类 的属性和方法,所以可以在阅读代码的时候和普通局部变量做区分;
第二是在属性和方法过多的情况下, this. 会触发 IDE工具的联想功能,帮助我们快速找到要操作的属性或调用的方法;
2、this()
当一个类当中有多个构造方法的时候,而且这些构造方法都有复用的代码,那么A构造方法就可以使用this()调用B构造方法的代码,只要括号里填写上与B构造方法同样的形参列表,从而就达到了构造方法的代码共享。
语法:只能写在构造方法当中且必须是第一句!
二、super的用法
super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。而我们在写有参构造方法的时候系统是不会自动生成默认无参构造方法的,所以就需要我们手动编写无参构造方法,否则编译器会报错。
super也有两种用法:
第一种用法:super()—>调用父类的指定构造方法
作用:由于产生子类对象之前先要产生父类对象部分,那么就要
调用父类构造方法;如果父类有多个构造,那么可以通过super()调用指定的父类构造方法,匹配方式是实参和形参的匹配;
使用语法:
只能写在子类构造方法的第一句;
第二种用法:super. 后面跟属性或行为;
当 super. 后面跟方法的时候,它是在调用父类中的该方法(子类的方法重写前);
当super.后面跟属性的时候,它是在调用父类当中定义的属性;
三、对比和总结
对比:
1、当super.后面跟方法的时候,它是在调用父类中的该方法(重写前);this.后面跟方法的时候,它是在调用子类中的该方法(重写后);
如果一个方法子类并没有重写,那么this.和super.效果一样;
2、 当super.后面跟属性的时候,它是在调用父类当中定义的属性;this.后面跟属性的时候,他既可以调从父类继承过来,也可以调用自身的;
只有一种情况,他们有区别,那就是父类定义了一个属性,子类又再一次定义了该属性,当然这是属于毫无意义的!因为这种在子类中定义和父类同名的属性,已经从父类继承了,没有意义再定义一次;
3、super()为子类调用父类的构造方法,this()为同类的多个构造方法之间互相调用;类似于”我的父类的“和”我的“的区别;
总结:
1、super. 能看到的 this. 一定能看到,反过来则不行;
2、super总是与父类相关,访问子类的属性和行为,我们通常全部用 this.;
3、super()和this()都必须写在构造方法的第一句;所以不能同时使用;