ここで自分のコンセプトを明確にしたかったので、質問しています...
自分のクラスに明示的なパラメーター化されたコンストラクターを定義した場合でも、Java コンパイラーによって提供されるデフォルトのコンストラクター (デフォルトですべてのクラスに提供されます) を呼び出すことはできますか??
または、そのような場合にコンパイル時エラーが発生しますか?? コンパイラによる呼び出しに関して正確に何が起こるか説明してください!!
ここで自分のコンセプトを明確にしたかったので、質問しています...
自分のクラスに明示的なパラメーター化されたコンストラクターを定義した場合でも、Java コンパイラーによって提供されるデフォルトのコンストラクター (デフォルトですべてのクラスに提供されます) を呼び出すことはできますか??
または、そのような場合にコンパイル時エラーが発生しますか?? コンパイラによる呼び出しに関して正確に何が起こるか説明してください!!
コンストラクターが指定されていない場合に限り、 引数のないコンストラクターがコンパイラーによって作成されます。
JLS は第 8 章で次のように述べています。
クラスにコンストラクタ宣言が含まれていない場合、仮パラメータも throws 節もないデフォルト コンストラクタが暗黙的に宣言されます。
1つの「キャッチ」は次のとおりです。
デフォルトのコンストラクターが暗黙的に宣言されているが、スーパークラスに、引数を取らず、throws 句を持たないアクセス可能なコンストラクター (§6.6) がない場合、コンパイル時エラーになります。
Java言語仕様は驚くほど役に立ち、実際に読みやすいものになります。
パラメーター化されたコンストラクターを定義するだけの場合、コンパイラーはデフォルトのコンストラクターを提供しません
エラーが出力されます
クラスにコンストラクター宣言が含まれていない場合、パラメーターを取らないデフォルトのコンストラクターが自動的に提供されます。
- 宣言されているクラスが基本クラスの Object である場合、デフォルトのコンストラクターは空の本体を持ちます。
- それ以外の場合、デフォルトのコンストラクターはパラメーターをとらず、単に引数なしでスーパークラス コンストラクターを呼び出します。
.
それに加えて、これにより追加のコンパイル エラーが発生する可能性があります。このコードをテストします。
class A{
A(int i){}
}
class B extends A{}
class Test{
PSVM{
B b = new B();
}
}
このコードでは、コンパイル エラーが発生します。
クラス B にはコンストラクターがありません。したがって、Javaはこのようなものをデフォルトのコンストラクターとして配置します。
B(){
super();
}
しかし、クラス A (クラス B) の Supper クラスには、引数を取らないコンストラクタがないため、コンパイル エラーが発生します。
そのため、記述している各クラスに引数なしのコンストラクターを用意することをお勧めします。
クラスにコンストラクタ宣言が含まれていない場合、仮パラメータも throws 節もないデフォルト コンストラクタが暗黙的に宣言されます。
宣言されているクラスが基本クラスの Object である場合、デフォルトのコンストラクターは空の本体を持ちます。それ以外の場合、デフォルト コンストラクターは引数なしでスーパークラス コンストラクターを呼び出すだけです。
既定のコンストラクターが暗黙的に宣言されているが、スーパークラスに、引数を取らず、throws 句を持たないアクセス可能なコンストラクターがない場合、コンパイル時エラーになります。
クラス型では、クラスが public と宣言されている場合、既定のコンストラクターには暗黙的にアクセス修飾子 public が与えられます。クラスが保護されていると宣言されている場合、デフォルトのコンストラクターには暗黙的にアクセス修飾子 protected が与えられます。クラスが private と宣言されている場合、デフォルトのコンストラクターにはアクセス修飾子 private が暗黙的に与えられます。それ以外の場合、既定のコンストラクターには、アクセス修飾子がないことによって暗黙的に示される既定のアクセスがあります。
Java は、コンストラクターが明示的に定義されていないクラスに対してのみ、デフォルトの引数なしコンストラクターを提供します。コンストラクターがプログラマーによって定義されると (引数のないコンストラクターであっても)、既定のコンストラクターは提供されません。
今、あなたはエラーについて尋ねていました:
Java言語仕様を徹底的に読むことをお勧めします