継承に関連するJavaの章を勉強していますが、いくつか質問があります。
継承がどのように機能するか(メソッドのオーバーライド、情報の非表示、サブクラスのスーパークラスのプライベートフィールドの使用方法など)については基本的に理解していますが、問題が1つだけあり、お役に立てば幸いです。
スーパークラスにデフォルト以外のコンストラクター(パラメーターなし)がある場合、サブクラスで新しいコンストラクターを作成する必要があります(デフォルトの場合もあります-パラメーターなし)が、最初のステートメントではスーパークラスコンストラクター呼び出しである必要があります。
わかりました、これまでのところとても良いです。私はこれまで理解しています。サブクラスでは、コンストラクターパラメーターのいずれかに一致するスーパークラスコンストラクターを呼び出す必要があります。
しかし、次のコードを確認しましょう:(スーパークラス)
public class Vehicle {
private int numOfWheels;
private double avgGallonsPerMile;
public Vehicle(int numOfWheels, double avgGallonsPerMile) {
this.numOfWheels = numOfWheels;
this.avgGallonsPerMile = avgGallonsPerMile;
}
}
そして別のサブクラスコード:
public class Car extends Vehicle{
public Car(double avgGallonsPerMile) {
super(What should i write here?, avgGallonsPerMile);
//force numOfWheels to 4;
}
}
サブクラスの演習は次のとおりです。
各サブクラスには、ガロンあたりのマイル数の値を引数として受け入れ、ホイールの数を適切な値(モーターサイクルの場合は2、車の場合は4)に強制するコンストラクターが含まれています。
サブクラスコンストラクターでは、 numOfWheelsフィールドは必要ありません。とにかく、4(車の場合)と2(バイクの場合)に強制するからです。
しかし、とにかくスーパークラスのためにそのデータが必要です。そのデータはどこで入手できますか?スーパークラスコンストラクターの呼び出しの最初のパラメーターとして何をすべきか。
しかし、それでもこれは孤独なケースではありません。サブクラスコンストラクターの特定のデータをパラメーターとして必要としない演習がたくさんありましたが、それでもスーパークラスコンストラクターの呼び出しでそれらが必要です。
そのような場合はどうすればよいですか?
私が伝えたいことを、あなたが私を理解してくれたことを本当に願っています。ちょっと難しいです。