0

私は現在 Java の継承について学んでおり、それを理解するのに非常に苦労していますが、理解できない主なことの 1 つは、次の例でスーパークラス コンストラクターを呼び出す必要がある理由と、それがどのように役立つかということです。この例は、メソッドに関する Oracle のチュートリアルからのsuper(...)ものです。

public MountainBike(int startHeight, 
                int startCadence,
                int startSpeed,
                int startGear) {
  super(startCadence, startSpeed, startGear);
  seatHeight = startHeight;
}

私が当初考えていたsuper(startCadence, startSpeed, startGear);のは、現在のコンストラクターのパラメーターのコードを短縮し、親クラスで渡された値を単純に取得して子クラスに追加することでした (このように):

public MountainBike(int startHeight) {
 ... 
}

しかし、私はそれが間違っていることをすでに知っているので、もう一度、super(startCadence, startSpeed, startGear);実際には何が行われているのかという問題に直面します。私のような初心者が定義を与えるのではなく、実際に理解できるように、何らかの形で説明していただければ幸いです。

4

2 に答える 2

4

MountainBikeは (some class like) の子であるため、オブジェクトBikeを必要とするあらゆるコンテキストで使用できるはずです。Bike子クラスで親クラスのコンストラクターを呼び出さない場合、子オブジェクトが親クラスのインスタンスとして機能するように適切に初期化されるという保証はありません。

Java では、子のコンストラクターで親のコンストラクターを明示的に呼び出さないと、親の既定のコンストラクター (つまり、引数なし) が暗黙的に呼び出されることを漠然と思い出しました。あなたの場合、デフォルトのコンストラクターがないか、子のコンストラクターに与えられた追加の引数を親のコンストラクターに渡す必要があるため、それだけでは不十分です。

于 2013-11-11T18:23:26.860 に答える