これをサブクラスのコンストラクターに配置しない場合、コンパイラによって自動的に配置されるのではないですか?
つまり、気にする必要がないということですか? いくつかの記事ではそう書かれています。
引数を持つコンストラクターが 1 つある場合、これがコンストラクターになりますか、それとも引数リストのないコンストラクターを受け取りますか?
ベストアンサー1
まず最初にいくつかの用語を説明します。
- 引数なしのコンストラクター:パラメータを持たないコンストラクタ。
- アクセス可能な引数なしのコンストラクター:スーパークラスの引数なしコンストラクタはサブクラスから参照可能。つまり、public または protected のいずれか、または両方のクラスが同じパッケージにある場合はパッケージ アクセスであることを意味します。
- デフォルトコンストラクタ:クラスに明示的なコンストラクターがない場合にコンパイラによって追加される、引数なしのパブリック コンストラクター。
したがって、すべてのクラスには少なくとも 1 つのコンストラクターがあります。
サブクラスのコンストラクタ5月サブクラスのコンストラクターのコードを実行する前に、スーパークラスのどのコンストラクターを呼び出すかを最初に指定します。
サブクラスのコンストラクターが呼び出すスーパークラスのコンストラクターを指定しない場合、コンパイラはスーパークラス内のアクセス可能な引数なしのコンストラクターを自動的に呼び出します。
スーパークラスに引数なしのコンストラクタがない場合、またはアクセスできない場合は、スーパークラスのコンストラクタを(サブクラスのコンストラクタで)呼び出すように指定しないとコンパイラエラーになるため、しなければならない指定されます。
例えば:
public class Base { }
public class Derived extends Base { }
これは問題ありません。明示的にコンストラクターを追加しない場合、Java によってパブリックのデフォルト コンストラクターが自動的に追加されるからです。
public class Base { }
public class Derived extends Base { public Derived(int i) { } }
また大丈夫です。
public class Base { public Base(String s) { } }
public class Derived extends Base { }
Base にはデフォルト コンストラクターがないため、上記はコンパイル エラーになります。
public class Base { private Base() { } }
public class Derived extends Base { }
Base の引数なしコンストラクターはプライベートなので、これもエラーになります。