Una classe astratta può avere un costruttore?
Se sì, come può essere usato e per quali scopi?
Sì, una classe astratta può avere un costruttore. Considerate questo:
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 superclasse Product
è astratta e ha un costruttore. La classe concreta TimesTwo
ha un costruttore che semplicemente codifica il valore 2. La classe concreta TimesWhat
ha un costruttore che permette al chiamante di specificare il valore.
I costruttori astratti saranno spesso usati per far rispettare vincoli o invarianti di classe, come i campi minimi richiesti per impostare la classe.
NOTA: poiché non c'è un costruttore predefinito (o no-arg) nel genitore classe astratta, il costruttore usato nella sottoclasse deve chiamare esplicitamente il costruttore padre.
Sì, può avere un costruttore ed è definito e si comporta come qualsiasi altro costruttore di classe. Solo che le classi astratte non possono essere istanziate direttamente, ma solo estese, quindi l'uso è sempre da un costruttore di una sottoclasse.
Considera questo:
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 superclasse è astratta e ha un costruttore.