this & super

123 阅读2分钟
  • 实例域&隐式参数&显式参数介绍

实例域:对象中的数据

emp.raiseSalary(5);

在该栗子中,emp是隐式参数,5是显式参数

隐式参数:不出现在方法声明中,是方法调用的目标或接收者

显式参数:出现在方法声明中

this:

  1. 调用隐式参数 eg: this.age;

  2. 调用该类的其他构造器 eg:单参构造调用无参构造,减少重复代码

super:

  1. 调用超类的方法 eg:super.update();
  2. 调用超类的构造器 构造子类的时候先调用父类的构造器

在构造子类的时候(写子类构造器的时候),必须先构造父类(调用父类构造器)。如果父类是有参构造,则先在子类构造器的首行super(参数1,参数2,...)

只有当父类只有无参构造的时候,首行的super()才能忽略不写

Question:构造器中调用其他构造器,无论是super还是this,都需要写在首行,如果子类构造器首行没有写调用超类的无参构造(可以忽略不写),而写了this(),那么会怎么操作呢?

Answer:super和this不能同时出现,但是构造子类的前提必须是先构造父类

具体看代码时:

  1. 出现super()或者this()时,这是在调用父类的构造方法或者本类的其他构造方法

  2. 出现super.某方法名时,就是调用超类(当前类的父类)里的该方法

  3. 出现this.变量名、this.方法名时,就是在调用本类的变量或者方法,当方法中的变量与类中的变量名字重复的时候,需要用this来区分到底用的是方法中的局部变量还是类中的变量