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.

leer  Enlace estático y dinámico en java

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).

leer  Java: encadenamiento de constructores con ejemplo

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.

leer  Encapsulación de Java con ejemplo

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:

  1. Una clase abstracta no sirve de nada hasta que otra clase la amplíe.
  2. 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.
  3. 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

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *