当你使用super()时幕后发生了什么

use*_*694 7 java oop inheritance subclass superclass

我很想知道当你super()用来调用超类的构造函数时幕后实际发生了什么.从子类实例化对象时,子类是否包含超类对象?或者它是如何工作的?

这是我的代码供参考:

public class Bicycle {
//Declaring bicycles states
public int movSpeed = 0;
public int cadence = 0;
public int curGear = 0;

//Class constructor
public Bicycle(){
}

//Class constructor with params
public Bicycle(int movSpeed, int cadence, int curGear) {
    this.movSpeed = movSpeed;
    this.cadence = cadence;
    this.curGear = curGear;
}
Run Code Online (Sandbox Code Playgroud)

子类:

public class mountainBike extends Bicycle {
//Declare mountainBikes states
public int frontTravel = 0;
public int rearTravel = 0;
public int gearMult = 0;

//Class constructor
public mountainBike(){
}

//Class constructor with params
public mountainBike(int movSpeed, int cadence, int curGear, int frontTravel, int rearTravel,int gearMult){
    super(movSpeed,cadence,curGear);
    this.frontTravel = frontTravel;
    this.rearTravel = rearTravel;
    this.gearMult = gearMult;
}
Run Code Online (Sandbox Code Playgroud)

man*_*uti 5

没有超级对象和子类对象.除了可能从父类继承的字段之外,它只是一个在子类中声明的字段的对象.

super被调用时,JVM调用父类的构造函数来初始化从父类继承的字段.在后台,构造函数转换为一个名为<init>指定值的JVM指令.

你可以直观地将它想象成:

public mountainBike(int movSpeed, int cadence, int curGear, int frontTravel, int rearTravel,int gearMult) {
    // an object is created here
    // call the super constructor special method <init> 
    // which initializes  the inherited fields movSpeed, cadence, and curGear
    // initialize the below fields
    this.frontTravel = frontTravel;
    this.rearTravel = rearTravel;
    this.gearMult = gearMult;
}
Run Code Online (Sandbox Code Playgroud)