Una clase declarada usando “resumen“La palabra clave se conoce como clase abstracta. Puede tener métodos abstractos (métodos corporales) y métodos concretos (métodos regulares con cuerpo). Una clase normal (clase no abstracta) no puede tener métodos abstractos. En esta guía aprenderemos qué es una clase abstracta, por qué la usamos y cuáles son las reglas que debemos recordar cuando trabajamos con ella en Java.
Una clase abstracta no puede ser instanciado, lo que significa que no está autorizado para crear un archivo objeto su. ¿Por qué? Hablaremos de ello más adelante en esta guía.
¿Por qué necesitamos un curso abstracto?
Digamos que tenemos una lección Animal
que tiene un metodo sound()
y sus subclases (ver herencia) similares Dog
, Lion
, Horse
, Cat
etc. Dado que el sonido de los animales difiere de un animal a otro, no tiene sentido implementar este método en la clase principal. Esto se debe a que cada clase secundaria debe anular este método para proporcionar sus propios detalles de implementación, como Lion
la clase dirá “Rugido” en este método e Dog
la clase dirá “Guau”.
Entonces, cuando sabemos que todas las clases de animales secundarios anularán y deberían anular este método, no tiene sentido implementar este método en la clase padre. Por lo tanto, hacer que este método sea abstracto sería una buena opción, ya que al hacerlo abstracto, obligamos a todas las subclases a implementar este método (de lo contrario, obtendrá un error de compilación), y tampoco es necesario que proporcione ninguna implementación a este método en la clase principal. .
Desde el Animal
La clase tiene un método abstracto, debe declarar esta clase abstracta.
Ahora cada animal debe tener un sonido, al hacer que este método sea abstracto, hemos hecho obligatorio que la clase secundaria proporcione detalles sobre la implementación de este método. De esta forma nos aseguramos de que cada animal tenga un sonido.
Ejemplo de una clase abstracta
//abstract parent class abstract class Animal{ //abstract method public abstract void sound(); } //Dog class extends Animal class public class Dog extends Animal{ public void sound(){ System.out.println("Woof"); } public static void main(String args[]){ Animal obj = new Dog(); obj.sound(); } }
Producción:
Woof
Entonces, para este tipo de escenario, generalmente declaramos la clase como abstracta y siguiente clases concretas extienda estas clases y anule los métodos en consecuencia e incluso pueden tener sus propios métodos.
Declaración de clase abstracta
Una clase abstracta delinea métodos pero no necesariamente implementa todos los métodos.
//Declaration using abstract keyword abstract class A{ //This is abstract method abstract void myMethod(); //This is concrete method with body void anotherMethod(){ //Does something } }
Reglas
Nota 1: Como vimos en el ejemplo anterior, hay casos en los que es difícil o, a menudo, innecesario implementar todos los métodos en la clase padre. En estos casos, podemos declarar la clase padre como abstracta, lo que la convierte en una clase especial que no está completa por sí sola.
Una clase derivada de la clase abstracta debe implementar todos los métodos declarados abstractos en la clase padre.
Nota 2: No se puede crear una instancia de la clase abstracta, lo que significa que no se puede crear su objeto. Para usar esta clase, necesita crear otra clase que amplíe esta clase y proporcione implementación de métodos abstractos, luego puede usar el objeto de esa clase secundaria para llamar a métodos no abstractos de la clase principal, así como a métodos implementados (aquellos que eran abstractos en la clase principal pero implementados en la clase secundaria).
Nota 3: Si un hijo no implementa todos los métodos abstractos de la clase padre abstracta, entonces la clase hijo también debe declararse abstracta.
¿Sabes? Dado que la clase abstracta también permite métodos concretos, no proporciona una abstracción del 100%. Se puede decir que aporta una abstracción parcial. La abstracción es un proceso en el que solo muestra datos “relevantes” y “oculta” al usuario los detalles innecesarios de un objeto.
Las interfaces, por otro lado, se utilizan para una abstracción del 100% (consulte más sobre abstracción aquí).
También puede leer esto: Diferencia entre la clase abstracta y la interfaz en Java
¿Por qué no podemos crear el objeto de una clase abstracta?
Dado que estas clases están incompletas, tienen métodos abstractos que no tienen cuerpo, por lo que si java le permite crear objetos de esta clase, si alguien llama al método abstracto usando ese objeto, ¿qué pasaría? No habría una implementación real del método a invocar.
También porque un objeto es concreto. Una clase abstracta es como un modelo, por lo que debe ampliarla y crearla antes de poder utilizarla.
Ejemplo para demostrar que no se permite la creación de objetos de una clase abstracta
Como se discutió anteriormente, no podemos instanciar una clase abstracta. Este programa genera un error de compilación.
abstract class AbstractDemo{ public void myMethod(){ System.out.println("Hello"); } abstract public void anotherMethod(); } public class Demo extends AbstractDemo{ public void anotherMethod() { System.out.print("Abstract method"); } public static void main(String args[]) { //error: You can't create object of it AbstractDemo obj = new AbstractDemo(); obj.anotherMethod(); } }
Producción:
Unresolved compilation problem: Cannot instantiate the type AbstractDemo
Nota: la clase que extiende la clase abstracta debe implementar todos los métodos abstractos de la misma; de lo contrario, también debe declarar esa clase abstracta.
Clase abstracta vs clase concreta
Una clase que no es abstracta se denomina Clase concreta. En el ejemplo anterior vimos al principio de esta guía, Animal
es una clase abstracta y Cat
, Dog
Y Lion
son clases concretas.
Puntos clave:
- Una clase abstracta no sirve de nada hasta que otra clase la amplíe.
- Si declaras un archivo método abstracto en una clase, también debe declarar el resumen de la clase. no se puede tener un método abstracto en una clase concreta. Lo contrario no siempre es cierto: si una clase no tiene un método abstracto, también se puede marcar como abstracto.
- También puede tener un método no abstracto (concreto).
He cubierto las reglas y ejemplos de métodos abstractos en un tutorial separado, puede encontrar la guía aquí: Método abstracto en Java
Por ahora, veamos solo algunas nociones básicas y ejemplos del método abstracto.
1) El método abstracto no tiene cuerpo.
2) Termine siempre la declaración con un punto y coma(;).
3) Debe sobrescribirse. Una clase abstracta debe extenderse y, de la misma forma, debe anularse un método abstracto.
4) Una clase debe declararse abstracta para tener métodos abstractos.
Nota: La clase que extiende la clase abstracta debe anular todos los métodos abstractos.
Ejemplo de método y clase abstracta
abstract class MyClass{ public void disp(){ System.out.println("Concrete method of parent class"); } abstract public void disp2(); } class Demo extends MyClass{ /* Must Override this method while extending * MyClas */ public void disp2() { System.out.println("overriding abstract method"); } public static void main(String args[]){ Demo obj = new Demo(); obj.disp2(); } }
Producción:
overriding abstract method