Class is not abstract and does not override abstract method in Java

Rupam Yadav 12 Oktober 2023
  1. Warum tritt in Java der Fehler Class is not abstract and does not override abstract method auf?
  2. Lösung 1: Überschreiben Sie die canSpeak()-Methode
  3. Lösung 2: Machen Baby abstrakt
  4. Lösung 3: Machen Sie Human zu einer Klasse und erweitern Sie sie in der Baby-Klasse
Class is not abstract and does not override abstract method in Java

In diesem Artikel finden Sie Lösungen für den Fehler Class is not abstract and does not override abstract method, der auftritt, wenn wir das Konzept der Abstraktion in Java verwenden.

Warum tritt in Java der Fehler Class is not abstract and does not override abstract method auf?

Im folgenden Code haben wir zwei Klassen und eine Schnittstelle. Die Klasse JavaExample hat eine main()-Methode ohne Körperteil. Wir erstellen eine Human-Schnittstelle mit einer abstrakten Methode canSpeak() mit boolean als Rückgabetyp. Wir geben keinen Körper für canSpeak() an, weil eine abstract-Methode keinen Körper hat.

In der zweiten Klasse, Baby, erben wir die Schnittstelle Human mit dem Schlüsselwort implements. Wenn wir eine IDE verwenden, tritt ein Fehler auf, und wenn wir den Code ausführen, tritt der Fehler auf, wie in der Ausgabe gezeigt.

Wenn wir uns den Fehler Baby is not abstract and does not override abstract method canSpeak() in Human ansehen, können wir verstehen, warum er aufgetreten ist. Es besagt, dass die Klasse Baby nicht abstrakt ist und die Methode canSpeak() der Schnittstelle Human nicht überschreibt.

Dieser Fehler tritt auf, weil wir die abstrakten Methoden überschreiben müssen, um den Hauptteil zu definieren, wenn wir eine Klassenschnittstelle mit abstrakten Methoden implementieren.

public class JavaExample {
  public static void main(String[] args) {}
}

class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Ausgabe:

java: Baby is not abstract and does not override abstract method speak() in Human

Lösung 1: Überschreiben Sie die canSpeak()-Methode

Um den Fehler java: Baby is not abstract and does not override abstract method speak() in Human nicht zu beheben, besteht die erste Lösung darin, die abstract-Methode canSpeak() in der Baby-Klasse zu überschreiben, die die Schnittstelle Human-Klasse implementiert.

Die Funktion canSpeak() gibt false zurück und in der Methode main() erzeugen wir ein Objekt der Klasse Baby und rufen die überschriebene Funktion canSpeak() auf. In der Ausgabe können wir sehen, dass kein Fehler vorliegt und der erwartete Wert angezeigt wird.

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();
}

Ausgabe:

Can Speak? false

Lösung 2: Machen Baby abstrakt

Eine andere Lösung besteht darin, die Klasse Baby zu einem abstract zu machen. Wir haben hier den gleichen Code, aber Baby ist eine abstrakte Klasse. Es kann nicht initialisiert werden; Wir erstellen nur eine Instanz der Klasse Baby in der Methode main().

public class JavaExample {
  public static void main(String[] args) {
    Baby baby;
  }
}

abstract class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Lösung 3: Machen Sie Human zu einer Klasse und erweitern Sie sie in der Baby-Klasse

Die letzte Lösung ist eine andere. Anstatt ein Interface zu implementieren, können wir das Interface Human in eine Klasse umwandeln und diese Klasse in der Klasse Baby mit dem Schlüsselwort extends erweitern. Wir spezifizieren den Body von canSpeak() in der Human-Klasse selbst, was den Fehler beseitigt.

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;
  }
}

Ausgabe:

Can Speak? false
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

Verwandter Artikel - Java Error

Verwandter Artikel - Java Class