[解決済み] 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(String someString) {
super(someString);
}
public String getName() {
return "name value for ASubClass";
}
}
のサブクラスを相当数用意する予定です。
BaseClass
を実装し、それぞれが
getName()
メソッドを独自の方法で使用することができます (
テンプレートメソッドパターン
).
これはうまくいくのですが、私はサブクラスに冗長なコンストラクタがあるのが好きではありません。型が増えるし、メンテナンスが大変だからです。のメソッドシグネチャを変更するとしたら?
BaseClass
のコンストラクタを変更すると、すべてのサブクラスを変更しなければならなくなります。
サブクラスからコンストラクタを削除すると、このようなコンパイル時エラーが発生します。
Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor
私がやろうとしていることは可能なのでしょうか?
どのように解決するのですか?
このエラーが発生するのは、コンストラクタを持たないクラスが デフォルト コンストラクタは引数なしで、次のコードと同じです。
public ACSubClass() {
super();
}
しかし、BaseClass はコンストラクタを宣言しているので(つまり、コンパイラが提供するデフォルトの引数なしコンストラクタを持たない)、これは違法です - BaseClass を継承するクラスは、このクラスに対して
super();
なぜなら、BaseClass には引数なしのコンストラクタが存在しないからです。
これは少し直感に反するかもしれません。というのも、サブクラスはベースクラスが持つあらゆるコンストラクタを自動的に持っていると思うかもしれないからです。
これを回避する最も簡単な方法は、ベースクラスがコンストラクタを宣言しない(つまり、デフォルトの引数なしコンストラクタを持つ)か、宣言済みの引数なしコンストラクタを持つ(それ自体または他のコンストラクタと一緒に)ようにすることです。なぜなら、クラスの正当なインスタンスを作成するために、コンストラクタに渡される引数が必要だからです。
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み] JsonMappingException: No suitable constructor found for type [simple type, class ]: can't instantiate from JSON object.
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] コンストラクタでオーバーライド可能なメソッド呼び出しの何が問題なのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み】javaで無効な文字定数
-
[解決済み】予期しない型エラー