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)
没有超级对象和子类对象.除了可能从父类继承的字段之外,它只是一个在子类中声明的字段的对象.
当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)