Uma classe abstrata pode ter um construtor?
Em caso afirmativo, como pode ser utilizado e para que fins?
Sim, uma classe abstrata pode ter um construtor. Considere isto:
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);
}
}
A superclasse 'Produto' é abstrata e tem um construtor. A classe de concreto TimesTwo
tem um construtor que apenas codifica o valor 2. A classe concreta TimesTwo
tem um construtor que permite que o chamador especifique o valor.
Construtores abstratos serão freqüentemente usados para impor restrições de classe ou invariantes, tais como os campos mínimos necessários para configurar a classe.
NOTA: Como não existe um construtor por defeito (ou sem margem) na classe abstrata, o construtor utilizado na subclasse deve chamar explicitamente a construtora mãe.
Sim, ele pode ter um construtor e é definido e comporta-se como qualquer outro construtor de classe's. Exceto que classes abstratas podem't ser diretamente instanciadas, apenas estendidas, portanto o uso é sempre de um construtor de uma subclasse's.
Considere isto:
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;
}
}
A superclasse é abstrata e tem um construtor.