私はJavaの初心者であり、Javaの使い方を学んでいます。サブクラスに引数コンストラクターがあり、サブクラスに引数コンストラクターがあり、スーパークラスにデフォルトの引数なしコンストラクターがある場合、スーパークラスの引数コンストラクターが必要ですか?
4 に答える
問題にはなりませんがsuper()
、サブクラスのコンストラクターで(サブクラスのコンストラクターの最初のステートメントとして)明示的に呼び出すか、コンパイラーに代わって実行させることができます。これは、引数のないコンストラクターが暗黙的に呼び出されるためです(存在する場合)。 )最初のステップとして。
これらのいずれかを実行すると、スーパークラスの作成方法が「クラスに通知」されます。
例:
class A {
//defaulut argumentless constructor is implicitly created
}
class B extends A {
B(int x) {
super(); //invoking super()
//rest of construction
}
}
はい、親クラスに引数付きコンストラクターがなくても、子クラスに引数付き/パラメーター化されたコンストラクターを含めることができます。親コンストラクターを呼び出すことができるかどうかは、子クラスコンストラクター(デフォルト/パラメーター化)で何をするかによって異なります。
親コンストラクターを呼び出すには、「super();」を使用します。子のコンストラクターの最初の行。このsuper()メソッドのパラメーターにいくつかのパラメーターを渡すと、親クラスのパラメーター化されたコンストラクターを呼び出そうとします。
これらの概念を実際に体験してみてください。はるかに完璧になります:)。
つまり、各クラスは自分自身のインスタンス化についてのみ心配する必要があります。
スーパークラスに引数なしのコンストラクターがあり、サブクラスにない場合、サブクラスはパラメーターをスーパークラスコンストラクターに渡す必要はありません。呼び出すだけです。ただし、スーパークラスがそのメンバーのいずれかをインスタンス化するためにパラメーターを必要とする場合、スーパークラスコンストラクターは実際にパラメーターを受け入れる必要があります。
サブクラスに引数コンストラクターが含まれている場合は、スーパークラスに引数コンストラクターを含める必要はありません。
基本的に、サブクラスのオブジェクトを作成すると、親クラスにデフォルトのコンストラクターがある場合、コンストラクターはスーパークラスから実行されます。スーパークラスにデフォルトのコンストラクターが含まれていない場合、コンパイラーは独自のデフォルトのコンストラクターを提供します。