Class Is Not Abstract and Does Not Override Error en Java

Rupam Yadav 12 octubre 2023
  1. ¿Por qué se produce el error Class Is Not Abstract and Does Not Override Error en Java?
  2. Solución 1: anular el método canSpeak()
  3. Solución 2: Haz que Baby sea un resumen
  4. Solución 3: Hacer de Human una clase y extenderla en la clase Bebé
Class Is Not Abstract and Does Not Override Error en Java

Este artículo encontrará soluciones al error Class Is Not Abstract and Does Not Override Error que ocurre cuando usamos el concepto de abstracción en Java.

¿Por qué se produce el error Class Is Not Abstract and Does Not Override Error en Java?

En el siguiente código, tenemos dos clases y una interfaz. La clase JavaExample tiene un método main() sin ninguna parte del cuerpo. Creamos una interfaz Human con un método abstracto canSpeak() con boolean como tipo de retorno. No especificamos un cuerpo para canSpeak() porque un método abstracto no tiene cuerpo.

En la segunda clase, Baby, heredamos la interfaz Human utilizando la palabra clave implements. Si usamos un IDE, habrá un error, y cuando ejecutemos el código, ocurrirá el error, como se muestra en la salida.

Si observamos el error Baby is not abstract and does not override abstract method canSpeak() in Human, podemos entender por qué ocurrió. Dice que la clase Baby no es abstracta, y no anula el método canSpeak() de la interfaz Human.

Este error aparece porque tenemos que anular los métodos abstractos para definir el cuerpo al implementar cualquier interfaz de clase con métodos abstractos.

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

class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Producción :

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

Solución 1: anular el método canSpeak()

Para corregir el error java: Baby is not abstract and does not override abstract method speak() in Human, la primera solución es anular el método abstract canSpeak() en la clase Baby que implementa Human interfaz.

La función canSpeak() devuelve falso y en el método main() creamos un objeto de la clase Baby y llamamos a la función anulada canSpeak(). En el resultado, podemos ver que no hay ningún error y se muestra el valor esperado.

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

Producción :

Can Speak? false

Solución 2: Haz que Baby sea un resumen

Otra solución consiste en convertir la clase Baby en abstract. Tenemos el mismo código aquí, pero Baby es una clase abstracta. No se puede inicializar; solo creamos una instancia de la clase Baby en el método main().

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

abstract class Baby implements Human {}

interface Human {
  abstract boolean canSpeak();
}

Solución 3: Hacer de Human una clase y extenderla en la clase Bebé

La última solución es diferente. En lugar de implementar una interfaz, podemos cambiar la interfaz Human a una clase y extender esa clase en la clase Baby usando la palabra clave extends. Especificamos el cuerpo de canSpeak() en la propia clase Human, lo que elimina el error.

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

Producción :

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

Artículo relacionado - Java Error

Artículo relacionado - Java Class