-1

次の基本クラスとサブクラスがあります。

public class BaseClass<T> {
    public BaseClass(T value){
}

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
    }
} 

次のエラーが表示されます: Implicit super constructor BaseClass() is undefined. 別のコンストラクターを明示的に呼び出す必要があります

これを修正するにはどうすればよいですか?

4

2 に答える 2

6

サブクラスのコンストラクターを次のように変更します。

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
        super(value);
    }
} 

を追加しない場合super(value);、コンパイラは自動的に を追加し、スーパー クラスsuper();のコンストラクターにチェーンします。0-arg基本的に、元のサブクラス コンストラクターは次のようにコンパイルされます。

public NewClass(T value){
    super();
}

0-argこれで、コンパイラが見つけられないスーパー クラス コンストラクタを呼び出そうとすることがわかります。なんで?スーパークラスでは1-argコンストラクターを提供しているため、コンパイラーはそこにデフォルトのコンストラクターを追加しません。したがって、そのエラー。

スーパークラスに明示的なコンストラクターを指定することで、この問題を回避することもでき0-argます。この場合、元のサブクラスのコードは正常に機能します。

于 2013-09-23T08:39:53.197 に答える
1

別のコンストラクターを明示的に呼び出すように求められた場合は、それを実行してください。

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
        super(value);
    }
} 
于 2013-09-23T08:41:38.223 に答える