Kann eine abstrakte Klasse einen Konstruktor haben?
Wenn ja, wie kann er verwendet werden und für welche Zwecke?
Ja, eine abstrakte Klasse kann einen Konstruktor haben. Bedenken Sie dies:
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);
}
}
Die Oberklasse Produkt
ist abstrakt und hat einen Konstruktor. Die konkrete Klasse TimesTwo
hat einen Konstruktor, der nur den Wert 2 fest einträgt. Die konkrete Klasse TimesWhat
hat einen Konstruktor, der es dem Aufrufer erlaubt, den Wert anzugeben.
Abstrakte Konstruktoren werden häufig verwendet, um Klasseneinschränkungen oder Invarianten durchzusetzen, wie z. B. die Mindestfelder, die zur Einrichtung der Klasse erforderlich sind.
HINWEIS: Da es in der übergeordneten Klasse keinen Standard- (oder no-arg-) Konstruktor gibt
abstrakten Klasse gibt, muss der in der Unterklasse verwendete Konstruktor explizit den den übergeordneten Konstruktor aufrufen.
Ja, sie kann einen Konstruktor haben und dieser ist definiert und verhält sich wie der Konstruktor jeder anderen Klasse. Abgesehen davon, dass abstrakte Klassen nicht direkt instanziiert, sondern nur erweitert werden können, erfolgt die Verwendung also immer über den Konstruktor einer Unterklasse.
Bedenken Sie dies:
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;
}
}
Die Oberklasse ist abstrakt und hat einen Konstruktor.