Saltar al contenido

¿Cuál es la importancia de la clase abstracta que se extiende desde otra clase abstracta?

Este enunciado ha sido analizado por nuestros especialistas para que tengas la seguridad de la veracidad de este post.

Solución:

Está totalmente bien cuando una clase abstracta extiende otra clase abstracta. Solo significa que detalles el comportamiento de la nueva clase establecido sobre el comportamiento de la vieja clase. Pero todavía no es un objeto completo para usar, porque aún se desconoce parte de su comportamiento.

En analogía con el mundo real.
Imagina que tienes una clase. Vehicle. Puede ser cualquier vehículo: coche, avión, autobús, bicicleta, lo que sea. Esta es tu clase abstracta. ¿Puedes usarlo ahora? No, porque no sabes si tienes que pisar los pedales o girar el volante.
Ahora crea otra clase, digamos, Car extends Vehicle. ¿Puedes usarlo ahora? Probablemente, pero aún no sabes si es un camión o un automóvil de pasajeros. Pero ya sabes que tiene volante.
Y finalmente, cuando cree una clase más, diga, MySuperPassengerCar extends Car sabes exactamente qué objeto es, cómo se puede usar y qué métodos tiene.

La clase abstracta define métodos abstractos. Cualquier clase que extienda otra clase mejora la superclase al agregar más comportamiento. Si la clase secundaria es abstracta, puede agregar algún comportamiento abstracto.

Los métodos abstractos son como contratos. El otro código puede consumir el código existente y puede depender de él. La clase concreta está obligada a seguir el contrato proporcionando la implementación.

Veámoslo con un ejemplo a continuación.

public abstract class SuperAbstract 
      public void nonAbstract()
            // some code
      
      public abstract void contract();


public abstract class SubAbstract extends SuperAbstract
       public void additionalNonAbstract()
             // some code
        
        public abstract void additionalContract();
 }

public class Concrete extends SubAbstract
       public void contract()
             // implementation
       
       public void additionalContract()
               //implementation
       


// although below is allowed and sometimes when we use an external library then this is one of the way but still this is not a good practice. 
// dependencies should be on abstractions only and not on concrete implementation
public abstract class AnotherAbstract extends Concrete
       public void someMethod()
             //some code
       
       public abstract void oneMoreContract();


public class ConcreteA extends AnotherAbstract
        public void oneMoreContract()
               //some implementation
        

Ahora tenga en cuenta que en total hemos definido 3 contratos y ConcreteA tiene todas las implementaciones. También tenga en cuenta que como Concrete proporciona implementaciones para métodos contract y additionalContract por lo tanto, esas implementaciones son heredadas por ConcreteA

El código del consumidor puede depender fácilmente de la abstracción. Vamos a verlo en código de usuario (código de consumidor)

  public class Consumer
      public void m1(SuperAbstract c)
             c.contract();
             c.nonAbstract();
     
     public void m2(AnotherAbstract c)
          c.contract();
          c.nonAbstract();
          c.oneMoreContract();
          c.additionalContract();
    
 }

Ahora veamos el código de cableado que proporciona las dependencias.

 public class Main
       public static void main(String[] args)
            Consumer c = new Consumer();
             c.m1(new Concrete());
             c.m1(new ConcreteA());
             c.m2(new ConcreteA());
     

Si para ti ha resultado de ayuda este post, sería de mucha ayuda si lo compartes con otros entusiastas de la programación de esta manera contrubuyes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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