ホームページ > Java > &#&チュートリアル > Java サブクラスで「暗黙のスーパー コンストラクターが未定義です」エラーが発生するのはなぜですか?またその修正方法は何ですか?

Java サブクラスで「暗黙のスーパー コンストラクターが未定義です」エラーが発生するのはなぜですか?またその修正方法は何ですか?

DDD
リリース: 2024-11-29 14:34:11
オリジナル
886 人が閲覧しました

Why Does a Java Subclass Get an

デフォルトの Java コンストラクターでの暗黙的なスーパー コンストラクター エラー

Java では、明示的に定義されていないクラスに対して、デフォルトのコンストラクターがコンパイラーによって自動的に提供されます。任意のコンストラクター。ただし、基本クラスがコンストラクターを定義すると、コンパイラーはサブクラスのデフォルト コンストラクターを暗黙的に生成しなくなります。これにより、「暗黙的なスーパー コンストラクターはデフォルト コンストラクターに対して未定義です」というエラーが発生する可能性があります。

例:

次のコードを検討してください:

abstract public class BaseClass {
    String someString;
    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}

public class ACSubClass extends BaseClass {
    public ASubClass() { // default constructor
        // super(someString);  // error: super() must be invoked in subclasses
    }
    public String getName() {
        return "name value for ASubClass";
    }
}
ログイン後にコピー

ここで、ACSubClass には明示的なコンストラクターがありません。代わりに、コンパイラによって提供されるデフォルトのコンストラクターに依存します。ただし、BaseClass はコンストラクターを定義するため、BaseClass のデフォルトのコンストラクターは存在しません。これにより、サブクラスで明示的なコンストラクターを定義する必要があることを示すコンパイラ エラーが発生します。

解決策:

このエラーを解決するには、明示的なコンストラクターを提供する必要があります。 super(parameters) を使用してスーパー コンストラクターを呼び出すサブクラス内。あるいは、基本クラスを変更してデフォルトのコンストラクターを提供することもできます。

// Option 1: Provide an explicit constructor in the subclass
public class ACSubClass extends BaseClass {
    public ASubClass(String someString) {
        super(someString);
    }
    public String getName() {
        return "name value for ASubClass";
    }
}

// Option 2: Modify the base class to have a default constructor
abstract public class BaseClass {
    String someString;

    public BaseClass() {}  // added default constructor

    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}
ログイン後にコピー

以上がJava サブクラスで「暗黙のスーパー コンストラクターが未定義です」エラーが発生するのはなぜですか?またその修正方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート