Super关键字

it2022-05-05  157

调用父类 (Superclass) 的成员或者方法

调用父类的构造函数

1.调用父类 (Superclass) 的成员或者方法

如果你的方法覆写一个父类成员的方法, 你可以通过 super 关键字调用父类的方法. 考虑下面的父类:

public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); } }

 

下面是一个子类 (subclass), 叫做 Subclass, 覆写了 printMethod():

public class Subclass extends Superclass { // overrides printMethod in Superclass public void printMethod() { super.printMethod(); System.out.println("Printed in Subclass"); } public static void main(String[] args) { Subclass s = new Subclass(); s.printMethod(); } }

 

输出

Printed in Superclass. Printed in Subclass

 

2.调用父类的构造函数

使用 super 关键字调用父类的构造函数. 下面的 MountainBike 类是 Bicycle 类的子类. 它调用了父类的构造方法并加入了自己的初始化代码:

public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; }

 

调用父类的构造体必须放在第一行,未放在第一行,则会显示super(parameter list);错误

使用

super();

 

或者:

super(parameter list);

 

通过 super(), 父类的无参构造体会被调用. 通过 super(parameter list), 父类对应参数的构造体会被调用.

注意: 构造体如果没有显式的调用父类的构造体, Java 编译器自动调用父类的无参构造. 如果父类没有无参构造, 就会报错 ( compile-time error).

 

在Java中,子类的构造过程中,必须 调用其父类的构造函数, 是因为有继承关系存在时, 子类要把父类的内容继承下来, 通过什么手段做到的? 这样: 当你new一个子类对象的时候, 必须首先要new一个父类的对象出来, 这个父类对象位于子类对象的内部, 所以说,子类对象比父类对象大, 子类对象里面包含了一个父类的对象, 这是内存中真实的情况.

构造方法是new一个对象的时候, 必须要调的方法, 这是规定, 要new父类对象出来, 那么肯定要调用其构造方法, 所以 第一个规则:子类的构造过程中,必须 调用其父类的构造方法

一个类, 如果我们不写构造方法, 那么编译器会帮我们加上一个默认的构造方法, 所谓默认的构造方法, 就是没有参数的构造方法, 但是如果你自己写了构造方法, 那么编译器就不会给你添加了

所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是

第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法

注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数

 

super()和this在构造体中的使用:

this() 在同一个类的构造体被调用. this("toto","tata",1)相当于调用对应参数的构造体.

super() 用来调用父类构造体.

转载于:https://www.cnblogs.com/Frances-CY-FKYM/p/10442478.html


最新回复(0)