super()
を使用してスーパークラスのコンストラクタを呼び出すと、実際に何が起こっているのか不思議です。オブジェクトがサブクラスからインスタンス化されるとき、サブクラスはスーパークラスオブジェクト内にありますか?またはそれはどのように機能しますか?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;
}
技術的にはあなたの 'mountainBike'は'(... argsを) 'スーパーを呼び出し、' Bicycle'である([UpperCamelCase](https://en.wikipedia.org/wiki/CamelCase)クラスのために使用してください)特定のコンストラクターが呼び出されたことを伝えます。 argsの有無にかかわらず 'super()'を起動しないと、デフォルトのコンストラクタが呼び出されます。 – Emz
私はあなたがJavaについてかなり新しいと思うので、[primitive default values](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)を指摘したいと思います。自動的に行われるように、 'frontTravel'、' rearTravel'などの値を '0'に設定する本当の理由です。 – Emz
参照先として_Head First Java_を確認してください(第9章、「オブジェクトの生活におけるスーパークラスコンストラクタの役割」(http://tinyurl.com/usingSuper))。 – Eugene