コンパイル中に引数エラーが発生します。これが何が悪いのかわからない。
出力はbjになると思っていました。クラスaにはデフォルトのコンストラクターがないため、コンパイル時にデフォルトのコンストラクターがJVMによって作成されます。残りの出力はbjになります。私は何かが足りないのですか?
class a
{
a(String b)
{
System.out.println("this is a");
}
}
class b extends a
{
b()
{
System.out.println("b");
}
}
class c extends b
{
c(String j)
{
System.out.println(j);
}
public static void main(String...k)
{
new c("J");
}
}
エラーを以下に示します。
javac construct.java
construct.java:12: error: constructor a in class a cannot be applied to given ty
pes;
{
^
required: String
found: no arguments
reason: actual and formal argument lists differ in length
1 error
クラスaにはデフォルトのコンストラクターがないため、コンパイル時にデフォルトのコンストラクターがJVMによって作成されます。
デフォルトのコンストラクターは、カスタムコンストラクターを定義しない場合にのみ作成されます。
IDEは、b()
宣言時に次のメッセージを表示するはずです。
「で使用可能なデフォルトコンストラクタがありませんパッケージ.Aは」
をインスタンス化しようとするb
と、super()
が暗黙的に呼び出されましたが、のa(String b)
代わりにのみ見つかりましたa()
。エラーメッセージが示すように、a(String b)
期待してString
いましたが、引数がありませんでした。
解決策は、パラメーターなしのa()
コンストラクターを作成するかa(String b)
、クラスb
コンストラクターでコンストラクターを呼び出すことです。
class b extends a
{
b()
{
super(""); // call to class a constructor passing some string as argument
System.out.println("b");
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加