¿Puede una clase abstracta tener un constructor?
En caso afirmativo, ¿cómo puede utilizarse y con qué fines?
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 Producto
es abstracta y tiene un constructor. La clase concreta TimesTwo
tiene un constructor que sólo codifica el valor 2. La clase concreta TimesWhat
tiene un constructor que permite a la persona que llama especificar el valor.
Los constructores abstractos se utilizan con frecuencia para reforzar las restricciones o invariantes de la clase, como los campos mínimos necesarios para configurar la clase.
NOTA: Como no hay un constructor por defecto (o sin carga) en la clase abstracta padre
clase abstracta, el constructor utilizado en la subclase debe llamar explícitamente a al constructor padre.
Sí, puede tener un constructor, que se define y se comporta como el constructor de cualquier otra clase. Excepto que las clases abstractas no pueden ser instanciadas directamente, sólo extendidas, por lo que el uso es siempre desde el constructor de una subclase.
Considera esto:
abstract class Product {
int value;
public Product( int val ) {
value= val;
}
abstract public int multiply();
}
class TimesTwo extends Product {
public int mutiply() {
return value * 2;
}
}
La superclase es abstracta y tiene un constructor.