Java での Class Is Not Abstract and Does Not Override Error

Rupam Yadav 2023年10月12日
  1. エラーClass Is Not Abstract and Does Not Override Error が Java で発生するのはなぜですか
  2. 解決策 1:canSpeak() メソッドをオーバーライドする
  3. 解決策 2:Baby を抽象化する
  4. 解決策 3:Human をクラスにして、Baby クラスに拡張する
Java での Class Is Not Abstract and Does Not Override Error

この記事では、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 を抽象化する

もう一つの解決策は、クラス Babyabstract にすることです。ここでは同じコードを使っていますが、Babyabstract クラスです.これは初期化することができず、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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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 Class