super关键字

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java提供了super关键字,super关键字可以在子类中调用父类的普通属性、方法和构造方法。

下面详细讲解super关键字的具体用法。

1.使用super关键字访问父类的成员变量和成员方法,具体格式如下:

super.成员变量

super.成员方法(参数1,参数2...)

图1:super关键字_第1张图片下面通过一个案例学习使用super关键字访问父类的成员变量和成员方法, 修改图1中的代码,在Dog类中使用super关键字访问父类的shout()方法,修改后的代码如图2所示。

图2:super关键字_第2张图片

在图2中,第2~8行代码定义了一个Animal类,并在Animal类中定义了name属性和shout()方法。第10~19行代码定义了Dog类并继承了Animal类。 在Dog类的shout()方法中使用“super.shout()”调用了父类被重写的shout()方法。在printName()方法中使用“super.name”访问父类的成员变量name。从图2运行结果中可以看出,子类通过super关键字可以成功地访问父类成员变量和成员方法。

图2运行结果:super关键字_第3张图片

2.使用super关键字访问父类中指定的构造方法,具体格式如下: 

super(参数1,参数2...)

下面通过一个案例学习如何使用super关键字调用父类的构造方法,如图3所示。

图3:super关键字_第4张图片

图3运行结果:super关键字_第5张图片在图3中,第29行代码使用super()调用了父类中有两个参数的构造方法;39~41行代码是在子类Dog中重写了父类Animal中的info()方法;第46~47行代码实例化了一个Dog对象并调用了info()方法。由图3运行结果可知,程序输出的内容是在子类中定义的内容。这说明,如果在子类中重写了父类的info()方法,使用子类的实例化对象调用info()方法时,会调用子类中的info()方法。

注意:

通过super()调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。

super与this关键字的作用非常相似,都可以调用构造方法、普通方法和属性,但是两者之间还是有区别的,super与this的区别如图4所示。

 图4:super关键字_第6张图片

需要注意的是,this和super两者不可以同时出现,因为this和super在调用构造方法时都要求必须放在构造方法的首行。

你可能感兴趣的:(java)