Java での Class Is Not Abstract and Does Not Override Error
-
エラー
Class Is Not Abstract and Does Not Override Error
が Java で発生するのはなぜですか -
解決策 1:
canSpeak()
メソッドをオーバーライドする -
解決策 2:
Baby
を抽象化する -
解決策 3:
Human
をクラスにして、Baby
クラスに拡張する
この記事では、Java で抽象化の概念を使用するときに発生するエラーClass Is Not Abstract and Does Not Override Error
の解決策を見つけます。
エラーClass Is Not Abstract and Does Not Override Error
が Java で発生するのはなぜですか
以下のコードでは、2つのクラスと 1つのインターフェースがあります。クラス JavaExample
には、本体部分のない main()
メソッドがあります。戻り型として boolean
を使用して、abstract
メソッド canSpeak()
を使用して Human
インターフェイスを作成します。abstract
メソッドには本文がないため、canSpeak()
の本文は指定しません。
2 番目のクラス Baby
では、implements
キーワードを使用して Human
インターフェースを継承します。IDE を使用するとエラーが発生し、コードを実行すると、出力に示すようにエラーが発生します。
Baby is not abstract and does not override abstract method canSpeak() in Human
というエラーを見ると、なぜそれが発生したのかを理解できます。クラス Baby
は抽象的ではなく、Human
インターフェイスのメソッド canSpeak()
をオーバーライドしないことを示しています。
このエラーが発生するのは、抽象メソッドを使用してクラスインターフェイスを実装するときに、本体を定義するために抽象メソッドをオーバーライドする必要があるためです。
public class JavaExample {
public static void main(String[] args) {}
}
class Baby implements Human {}
interface Human {
abstract boolean canSpeak();
}
出力:
java: Baby is not abstract and does not override abstract method speak() in Human
解決策 1:canSpeak()
メソッドをオーバーライドする
Baby is not abstract and does not override abstract method speak() in Human
エラーの抽象メソッド speak()をオーバーライドしない場合、最初の解決策は、Human
を実装する Baby
クラスの abstract
メソッド canSpeak()
をオーバーライドすることです。インターフェース。
canSpeak()
関数は false を返し、main()
メソッドで Baby
クラスのオブジェクトを作成し、オーバーライドされた関数 canSpeak()
を呼び出します。出力では、エラーがなく、期待値が示されていることがわかります。
public class JavaExample {
public static void main(String[] args) {
Baby baby = new Baby();
System.out.println("Can Speak? " + baby.canSpeak());
}
}
class Baby implements Human {
@Override
public boolean canSpeak() {
return false;
}
}
interface Human {
abstract boolean canSpeak();
}
出力:
Can Speak? false
解決策 2:Baby
を抽象化する
もう一つの解決策は、クラス Baby
を abstract
にすることです。ここでは同じコードを使っていますが、Baby
は abstract
クラスです.これは初期化することができず、main()
メソッドで Baby
クラスのインスタンスを生成するだけです。
public class JavaExample {
public static void main(String[] args) {
Baby baby;
}
}
abstract class Baby implements Human {}
interface Human {
abstract boolean canSpeak();
}
解決策 3:Human
をクラスにして、Baby
クラスに拡張する
最後の解決策は別の解決策です。インターフェイスを実装する代わりに、インターフェイス Human
をクラスに変更し、キーワード extends
を使用して Baby
クラスでそのクラスを拡張できます。canSpeak()
の本体を Human
クラス自体で指定します。これにより、エラーが削除されます。
public class JavaExample {
public static void main(String[] args) {
Baby baby = new Baby();
System.out.println("Can Speak? " + baby.canSpeak());
}
}
class Baby extends Human {}
class Human {
boolean canSpeak() {
return false;
}
}
出力:
Can Speak? false
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn関連記事 - Java Error
- $' ': Java の Command Not Found エラーを修正
- Class X Is Public を X.java という名前のファイルで宣言する必要がある問題を修正
- Eclipse エラー: 選択を起動できません
- Eclipse で Java ランタイム環境を続行するにはメモリが不足しています
- Eclipse の`Java 仮想マシンが見つかりませんでした`というエラーを修正する
- IntelliJ IDEA のスレッド メイン Java.Lang.ClassNotFoundException での例外