Saltar al contenido

¿Puede una clase abstracta tener un constructor?

Solución:

Sí, una clase abstracta puede tener un constructor. Considera esto:

abstract class Product { 
    int multiplyBy;
    public Product( int multiplyBy ) {
        this.multiplyBy = multiplyBy;
    }

    public int mutiply(int val) {
       return multiplyBy * val;
    }
}

class TimesTwo extends Product {
    public TimesTwo() {
        super(2);
    }
}

class TimesWhat extends Product {
    public TimesWhat(int what) {
        super(what);
    }
}

La superclase Product es abstracto y tiene un constructor. La clase concreta TimesTwo tiene un constructor que solo codifica el valor 2. La clase concreta TimesWhat tiene un constructor que permite al llamador especificar el valor.

Los constructores abstractos se utilizarán con frecuencia para imponer restricciones de clase o invariantes, como los campos mínimos necesarios para configurar la clase.

NOTA: Como no hay un constructor predeterminado (o no-arg) en la clase abstracta principal, el constructor utilizado en la subclase debe llamar explícitamente al constructor principal.

Definiría un constructor en una clase abstracta si se encuentra en una de estas situaciones:

  • desea realizar alguna inicialización (en campos de la clase abstracta) antes de que se lleve a cabo la instanciación de una subclase
  • ha definido campos finales en la clase abstracta pero no los inicializó en la declaración misma; en este caso, DEBE tener un constructor para inicializar estos campos

Tenga en cuenta que:

  • puede definir más de un constructor (con diferentes argumentos)
  • puede (¿debería?) definir todos sus constructores protegidos (hacerlos públicos no tiene sentido de todos modos)
  • su (s) constructor (es) de subclase puede llamar a un constructor de la clase abstracta; puede que incluso tengo que llámelo (si no hay un constructor sin argumentos en la clase abstracta)

En cualquier caso, no olvide que si no define un constructor, el compilador generará uno automáticamente para usted (este es público, no tiene argumentos y no hace nada).

Sí, puede tener un constructor y está definido y se comporta como el constructor de cualquier otra clase. Excepto que las clases abstractas no se pueden instanciar directamente, solo extender, por lo que el uso es siempre del constructor de una subclase.

¡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 *