当我使用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;
}
子类:
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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
感谢您的回答!我只想留下resource我遇到的问题,这对于查看此问题的人来说非常好。
我们已经看到一个对象属于该类的数据类型 它被实例化了。例如,如果我们写
公共MountainBike myBike = new MountainBike();那么myBike就是 键入MountainBike。MountainBike是Bicycle和Object的后裔。因此,一个 MountainBike是一个自行车,也是一个对象,它可以使用 无论在哪里调用Bicycle或Object对象。
反过来不一定如此:自行车可能是MountainBike, 但这不一定。类似地,对象可以是自行车或 MountainBike,但不一定。