¿Qué es la clase abstracta en Java?

  • Las clases abstractas son como cualquier otra clase normal en Java. La principal diferencia entre la clase abstracta y la clase normal es crear la clase abstracta que necesitamos para usar la palabra clave 'ABSTARCT'. Es una separación de la implementación de clase.
  • Solían definir las características muy comunes de sus subclases. Este tipo de clase se conoce como clase abstracta.
  • Lo más importante es que no podemos crear un objeto de una clase abstracta.
  • Las clases abstractas pueden contener métodos abstractos y no abstractos. No pueden contener un cuerpo del método abstracto, que solo puede ser proporcionado por la subclase. Si la subclase no proporciona la implementación del método abstracto, entonces tenemos que hacer que sea RESUMEN explícitamente.
  • En otras palabras, si una clase contiene un método abstracto, entonces tiene que definirse como ABSTARCT.
  • Al usar clases abstractas podemos agrupar varias clases de Java juntas, también optimiza el código y lo hace más legible y reduce la redundancia. También proporciona una plantilla para futuras clases.

Sintaxis de la clase abstracta en Java

¿Cómo funciona Abstract Class en Java?

  • Una clase abstracta tiene un método abstracto y un método no abstracto, es decir, un método abstracto sin cuerpo y también pueden tener métodos con implementación.
  • Una clase abstracta se usa para proporcionar la característica más común que es específica para diferentes clases. Las subclases pueden proporcionar una implementación diferente de esos métodos abstractos de acuerdo con sus necesidades o requisitos.
  • No podemos crear un objeto de una clase abstracta utilizando el operador 'nuevo', pero aún podemos definir su constructor que solo puede invocarse en el constructor de su subclase. El constructor de la subclase puede acceder a un constructor de la superclase para inicializar su variable que podría estar utilizando en la subclase para requisitos adicionales.

Ejemplos de clase abstracta en Java

Human.java

package com.cont.article;
public abstract class Human
(
public abstract void whatTheylike();
public void doTheysleep()
(
System. out .println("Yes every human require sleep.");
)
)

Human1.java

package com.cont.article;
public class Human1 extends Human
(
@Override
public void whatTheylike()
(
System. out .println("we like to have icecream.");
)
)

Human2.java

package com.cont.article;
public class Human2 extends Human
(
@Override
public void whatTheylike()
(
System. out .println("we like to have coffee.");
)
)

TestHuman.java

package com.cont.article;
public class TestHuman
(
public static void main(String() args)
(
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
)
)

Salida:

En el ejemplo anterior, tenemos HUMAN como una clase abstracta que define las necesidades, gustos y aversiones comunes de un ser humano. Hay diferentes tipos de humanos con diferentes gustos y aversiones. Por lo tanto, cada humano puede proporcionar una implementación específica de lo que le gusta. Eso será específico solo para ellos.

La principal ventaja de la clase abstracta es que tenemos una implementación específica de métodos de acuerdo con un requisito que también conduce a reducir la redundancia, aumenta la legibilidad del código, oculta la implementación de métodos y, por lo tanto, proporciona abstracción parcial.

Podemos tener un ejemplo más para entender cuándo debemos usar las clases abstractas.

  • Deberíamos usar la clase abstracta cuando queremos compartir una funcionalidad común entre diferentes clases con una implementación específica.
  • En las clases abstractas los campos no deben ser estáticos y finales, también podemos tener métodos concretos definidos como privados, públicos y protegidos.

Digamos que tenemos una clase de animales. Hay variedades de animales que tenemos en la tierra y todas son diferentes entre sí en un sentido mayor o menor. Contendrá todas las características comunes de todos.

Ahora, esta clase Animal no puede tener métodos que sean específicos para cada animal. Entonces, por el concepto de clase abstracta, podemos implementar esta funcionalidad sin código redundante.

Todos los animales tienen un tipo diferente de sonido, hábitos, etc. Por ejemplo, perro, gato, elefante y bocadillo, todos tienen un sonido diferente. Entonces, para esto, podemos tener un método genérico en la clase principal a través del cual todas las demás subclases o clases secundarias pueden proporcionar su propia implementación específica.

En la clase padre, es decir, Animal, tenemos un método abstracto genérico llamado Sound (). Por lo tanto, cada clase secundaria necesita anular este método y proporcionar su propia implementación específica.

¿Clase abstracta e interfaz?

  • La clase abstracta y la interfaz se utilizan para lograr la abstracción en Java. Una clase abstracta proporciona abstracción parcial, mientras que la interfaz proporciona una abstracción 100% o completa.
  • Por defecto, las variables en una interfaz son finales. Pero la clase abstracta también contiene una variable no final. Del mismo modo, la clase abstracta también puede tener una variable estática, no estática. Pero la interfaz solo contendrá una variable final y estática.
  • Las variables miembro de una clase abstracta pueden ser privadas, públicas, protegidas, pero por defecto son públicas en el caso de la interfaz.
  • Una clase abstracta puede extender otra clase Java e implementar múltiples interfaces, pero una interfaz solo puede extender otra interfaz. Una clase abstracta puede proporcionar una implementación de una interfaz, pero una interfaz no puede hacerlo.
  • Utilizamos implementos y extensión de palabras clave para implementar y extender la interfaz y las clases, respectivamente.
  • Mediante el método, podemos modificar o acceder a las variables no estáticas y no finales de una clase abstracta.

Conclusión

  • Clase abstracta utilizada para proporcionar abstracción parcial. No se puede crear una instancia de una clase abstracta con la palabra clave NEW.
  • Un método abstracto no tiene cuerpo y siempre termina con un punto y coma (;).
  • La clase abstracta contiene métodos abstractos y no abstractos.
  • La subclase de una superclase abstracta debe proporcionar una implementación de todos los métodos abstractos si no proporciona, entonces debe declararse como clase abstracta.
  • Una subclase puede ser abstracta incluso si la superclase es concreta.
  • Una clase no abstracta no puede contener métodos abstractos. Además, el método abstracto no es estático.
  • Por lo tanto, podemos decir que las clases abstractas también contienen métodos abstractos y concretos, por lo que no pueden proporcionar una abstracción del 100%. Es un proceso de ocultar la lógica compleja del usuario final y les muestra solo los servicios. Una subclase puede ser abstracta incluso si su superclase es concreta, y también se puede usar como tipo de datos.
  • Una clase abstracta puede tener campos estáticos y métodos estáticos. Puede usar estos miembros estáticos con una referencia de clase.

Artículos recomendados

Esta es una guía de la clase abstracta en Java. Aquí discutimos la sintaxis y los ejemplos de la clase abstracta en Java junto con la clase abstracta y la interfaz. También puede consultar los siguientes artículos para obtener más información:

  1. Interfaz Java vs clase abstracta
  2. BoxLayout en Java
  3. ¿Qué es Java SE?
  4. ¿Qué es la herencia de Java?
  5. ¿Cómo funciona Abstract Class en PHP?
  6. Clase abstracta en C ++
  7. Guía de método estático en PHP
  8. Resumen completo del método estático de JavaScript