Kann eine abstrakte Klasse einen Konstruktor haben?
Wenn ja, wie und für welche Zwecke kann es verwendet werden?
Kann eine abstrakte Klasse einen Konstruktor haben?
Wenn ja, wie und für welche Zwecke kann es verwendet werden?
Ich weiß, dass dies ein alter Beitrag ist, aber dieser Codeabschnitt lässt sich nicht kompilieren. Die Unterklasse TimesTwo sollte den nicht standardmäßigen Konstruktor implementieren.
Dies ist ein Kompilierungsfehler ... TimesTwo muss einen Superkonstruktor aufrufen, um diese abstrakte Klasse zu implementieren....
Dieser Code lässt sich nicht kompilieren, da Sie keinen Standardkonstruktor in der Klasse Product haben und Ihr TimesTwo über einen Standardkonstruktor verfügt. Der Standardkonstruktor von TimesTwo wird den Standardkonstruktor der Klasse Product mit super() aufrufen, was zu einem Kompilierungsfehler führt.
Um eine Konstruktorverkettung zu erreichen, wird die abstrakte Klasse einen Konstruktor haben. Der Compiler hält die Super()-Anweisung innerhalb des Unterklassenkonstruktors, der den Oberklassenkonstruktor aufruft. Wenn es keine Konstruktoren für abstrakte Klassen gibt, werden die Java-Regeln verletzt und wir können keine Konstruktorverkettung erreichen.
Da ein abstrakte Klasse können Variablen aller Zugriffsmodifikatoren haben, sie müssen auf Standardwerte initialisiert werden, daher ist ein Konstruktor erforderlich. Bei der Instanziierung der Kindklasse wird ein Konstruktor einer abstrakten Klasse aufgerufen und die Variablen werden initialisiert.
Im Gegenteil, ein Schnittstelle nur konstante Variablen enthält, sind diese bereits initialisiert. Die Schnittstelle braucht also keinen Konstruktor.
Der Zweck des Konstruktors in einer Klasse besteht darin Felder initialisieren aber nicht zum "Erstellen von Objekten". Wenn Sie versuchen, eine neue Instanz einer abstrakten Superklasse zu erstellen, wird der Compiler einen Fehler anzeigen. Wir können jedoch eine abstrakte Klasse Employee erben und ihren Konstruktor nutzen, indem wir ihre Variablen setzen. Siehe folgendes Beispiel
public abstract class Employee {
private String EmpName;
abstract double calcSalary();
Employee(String name) {
this.EmpName = name;// constructor of abstract class super class
}
}
class Manager extends Employee{
Manager(String name) {
super(name);// setting the name in the constructor of sub class
}
double calcSalary() {
return 0;
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.