Class Is Not Abstract and Does Not Override Error en Java

Rupam Yadav 12 octobre 2023
  1. Pourquoi l’erreur Class Is Not Abstract and Does Not Override Error se produit-elle en Java ?
  2. Solution 1 : remplacer la méthode canSpeak()
  3. Solution 2 : Rendre Baby abstrait
  4. Solution 3 : Faites de Human une classe et étendez-la dans la classe Baby
Class Is Not Abstract and Does Not Override Error en Java

Cet article trouvera des solutions à l’erreur Class Is Not Abstract and Does Not Override Error qui se produit lorsque nous utilisons le concept d’abstraction en Java.

Pourquoi l’erreur Class Is Not Abstract and Does Not Override Error se produit-elle en Java ?

Dans le code ci-dessous, nous avons deux classes et une interface. La classe JavaExample a une méthode main() sans aucune partie de corps. Nous créons une interface Human avec une méthode abstract canSpeak() avec boolean comme type de retour. Nous ne spécifions pas de corps pour canSpeak() car une méthode abstract n’a pas de corps.

Dans la deuxième classe, Baby, nous héritons de l’interface Human en utilisant le mot-clé implements. Si nous utilisons un IDE, il y aura une erreur, et lorsque nous exécuterons le code, l’erreur se produira, comme indiqué dans la sortie.

Si nous regardons l’erreur Baby is not abstract and does not override abstract method canSpeak() in Human, nous pouvons comprendre pourquoi elle s’est produite. Il dit que la classe Baby n’est pas abstraite, et il ne remplace pas la méthode canSpeak() de l’interface Human.

Cette erreur apparaît car nous devons remplacer les méthodes abstraites pour définir le corps lors de l’implémentation de toute interface de classe avec des méthodes abstraites.

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

class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Production :

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

Solution 1 : remplacer la méthode canSpeak()

Pour corriger l’erreur Baby is not abstract and does not override abstract method canSpeak() in Human, la première solution consiste à remplacer la méthode abstract canSpeak() dans la classe Baby qui implémente Human. interface.

La fonction canSpeak() renvoie false et dans la méthode main(), nous créons un objet de la classe Baby et appelons la fonction surchargée canSpeak(). Dans la sortie, nous pouvons voir qu’il n’y a pas d’erreur et la valeur attendue s’affiche.

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

Production :

Can Speak? false

Solution 2 : Rendre Baby abstrait

Une autre solution consiste à faire de la classe Baby un abstract. Nous avons le même code ici, mais Baby est une classe abstract. Elle ne peut pas être initialisée ; nous ne créons une instance de la classe Baby que dans la méthode main().

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

abstract class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Solution 3 : Faites de Human une classe et étendez-la dans la classe Baby

La dernière solution est différente. Au lieu d’implémenter une interface, nous pouvons transformer l’interface Human en une classe et étendre cette classe dans la classe Baby en utilisant le mot-clé extends. Nous spécifions le corps de canSpeak() dans la classe Human elle-même, ce qui supprime l’erreur.

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

Production :

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

Article connexe - Java Error

Article connexe - Java Class