在学习java面向对象的模块的时候我们会遇见this和super这两个关键字,首先来说this关键字,我们可以把this关键字看成是当前正在访问的对象,this关键字有三种用法:
(1)this.属性名 (2)this.方法 (3)this(参数列表) 调用本类的构造方法
关于这几个用法我们分别举一个例子来看:
(1)this.属性名 如图所示:
this.gender和this.name指的是当前对象的属性而没有this的gender和name则是形参。
(2)this.方法 如图所示:
这里是this调用toString()方法,当然this可以省略不写。
(3)this(参数列表) 如图所示:
这里需要注意的是this()需要写在方法的第一行,因为初始化动作要先执行。
super关键字:在Java中用super关键字引用父类的成分,同样也是三种用法:
(1)super关键字可以访问父类定义的属性
(2)super关键字可以调用父类定义的成员方法
(3) super关键字可以在子类的构造方法中调用父类的构造方法
这是一个子类Dog中重写的sound()函数调用父类Animal中sound()函数的例子,假如不写super关键字会导致系统无限循环调用自身的sound()。
再来一个super关键字在子类的构造方法中调用父类的构造方法的例子吧。
子类Dog的对象调用父类Animal中的构造函数。
默认父类中的构造函数会调用Object中的无参构造函数,在子类的构造函数中必须调用父类的构造函数,如果不写就会默认调用父类中无参的构造函数,因此最好我们不管在写父类还是子类构造函数的时候都需要写好无参的构造函数,如若不写,有可能在子类默认的调用无参构造函数的时候报错。