0

私の教科書によると:

サブクラス内のコンストラクターの実行によってスーパークラス コンストラクターが呼び出されない場合、Java はスーパークラスのパラメーターなしのコンストラクターを自動的に呼び出します。

それは、すべてのスーパークラス データ フィールド (スーパークラス変数) が null に設定されることを意味しますか (コンストラクターがパラメーターのないコンストラクターであるため)。

4

4 に答える 4

1

その人が不注意でそれらを指定しない場合、エラーが発生しますか?

あなたは「彼ら」が何を指しているのか言っていませんが...

  1. クラスコンストラクターが、そのスーパークラスが(明示的または暗黙的に)提供しない引数のないコンストラクターに(明示的または暗黙的に)依存している場合、それはコンパイルエラーです。

  2. プログラマーが誤ってクラス内のコンストラクターを省略し、その参照フィールドが(のみ)デフォルトで初期化さnullれた場合、コンパイルエラーは発生しません。(コードは有効です。コンパイラーはプログラマーの意図を判断できません。つまり、コンストラクターが誤ってまたは故意に省略されたかどうかを判断できません。)ただし、一部のコードがフィールド/フィールド値を非であると想定して使用すると、後でランタイムエラーが発生する可能性があります。 -ヌル。

  3. プログラマーがコンストラクターを定義したが、コンストラクターが一部のフィールドの初期化に失敗した場合、結果は2と同じになります。コンパイルエラーはなく、実行時エラーの可能性があります。

于 2012-10-14T00:07:33.120 に答える
1

いいえ、super引数のない s コンストラクターがいくつかのオブジェクトを初期化する場合、この初期化が行われます。

class A { 
  public int x;
  A () { 
     x = 1;
  }
}
class B extends A { 
  B() { 
  }
}

Bコンストラクターはsuper()(明示的に記述されていなくても) 最初の行として呼び出され、x=1その過程で初期化されます。

于 2012-10-13T23:46:02.447 に答える
1

これは、スーパークラスのフィールドが、非パラメーター コンストラクターによって設定されたものに設定されることを意味します。

これは、そうでない場合もありますnull。非パラメーター スーパークラス コンストラクターが定義されておらず、サブクラスのコンストラクターがスーパークラス フィールドを設定していない場合、それらは .yes になりますnull

于 2012-10-13T23:46:47.370 に答える
1

いいえ:

class A {
    public int x;
    public A() {
        x = 42;
    }
}

class B extends A {}
assert(new B().x == 42)

「パラメーターなしのコンストラクター」は、空のコンストラクターである必要はありません。

于 2012-10-13T23:47:32.860 に答える