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 Error
en Java? -
Solución 1: anular el método
canSpeak()
-
Solución 2: Haz que
Baby
sea un resumen -
Solución 3: Hacer de
Human
una 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