Class Is Not Abstract and Does Not Override Error en Java
-
¿Por qué se produce el error
Class Is Not Abstract and Does Not Override Erroren Java? -
Solución 1: anular el método
canSpeak() -
Solución 2: Haz que
Babysea un resumen -
Solución 3: Hacer de
Humanuna clase y extenderla en la claseBebé
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedInArtículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase
