JavaRush /Blog Java /Random-ES /Pregunta y respuesta: ¿Es posible definir métodos abstrac...

Pregunta y respuesta: ¿Es posible definir métodos abstractos en una clase final?

Publicado en el grupo Random-ES
Esta interesante e importante pregunta se la hice a uno de mis lectores durante una entrevista telefónica para un puesto de desarrollador de Java. Aunque sabía que era imposible crear una clase abstracta finalen el lenguaje Java , la redacción de la pregunta lo confundió. La respuesta es simple: no, finalno puede haber métodos abstractos en una clase. ¿Por qué? Porque tan pronto como declara un método abstracto en una clase de lenguaje Java, esta clase automáticamente se vuelve abstracta y finalno puede crear una clase abstracta en lenguaje Java. finalEsto significa que no puede haber métodos abstractos en una clase Java.
Pregunta y respuesta: ¿Es posible definir métodos abstractos en una clase final?  - 1
Muchos desarrolladores de Java se confunden al responder esta pregunta debido a la redacción. Incluso si la persona a la que se le hizo la pregunta está familiarizada con el concepto general, es posible que no se dé cuenta de que una clase, después de declarar un método abstracto en ella, se vuelve abstracta y no se puede crear una clase abstracta en Java final. Este punto separa esta pregunta de la pregunta más común y frecuente: ¿es posible en Java declarar una clase abstracta y final al mismo tiempo? Veamos un código de ejemplo para demostrar que finalno es posible declarar un método abstracto en una clase. Tengamos Hello.javauna public finalclase llamada Hello, que tiene un método abstracto print().
public final class Hello {
  public abstract void print();
}
Escriba este código en el IDE, recibirá el siguiente mensaje de error, dicen Helloque debe ser una clase abstracta para que se puedan declarar métodos abstractos en ella.
Pregunta y respuesta: ¿Es posible definir métodos abstractos en una clase final?  - 2
Pregunta y respuesta: ¿Es posible definir métodos abstractos en una clase final?  - 3
Lo mismo sucederá si escribe este código en el Bloc de notas y lo compila usando la utilidad javac desde la línea de comando. Según las especificaciones de Java, tan pronto como declaras un método abstracto dentro de una clase, esa clase se convierte en una clase abstracta y, como no puedes crear una clase abstracta finalen Java, el compilador generará un error. Esto es válido tanto para las clases de nivel superior como para las clases anidadas en el lenguaje Java. Incluso si declara un método abstracto en una finalclase anidada, el error será el mismo. Otra pregunta relacionada es: ¿ puede una clase abstracta en Java tener métodos estáticos? Respuesta: sí, pueden, no hay problema en declarar un método estático en una clase abstracta, ya que para usar un método estático no es necesario crear una instancia de la clase, se pueden llamar simplemente usando el nombre de la clase. Podemos modificar nuestro ejemplo para incluir Helloun método en la clase main(), que es estático en Java, como se muestra a continuación:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Cómoой-то código
  }
}
Como puede ver, no se genera ningún error de compilación. Este código se compila sin problemas, ya que en Java puedes declarar de forma completamente segura un método estático en una clase abstracta. Breves conclusiones Es imposible declarar un método abstracto en una finalclase. Porque una vez que haces esto, la clase automáticamente se vuelve abstracta, de acuerdo con las especificaciones de Java. Y dado que finaluna clase -en Java no puede ser abstracta, esto es inaceptable y el compilador le prohibirá hacerlo arrojando un error. Pero puedes declarar métodos estáticos tanto en clases finales como abstractas, no hay problemas con esto.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION