739 Stimmen

Kann eine abstrakte Klasse einen Konstruktor haben?

Kann eine abstrakte Klasse einen Konstruktor haben?

Wenn ja, wie und für welche Zwecke kann es verwendet werden?

1voto

Kedar Parikh Punkte 1176

Ja, sicherlich können Sie eine hinzufügen, wie bereits für die Initialisierung von abstrakten Klassenvariablen erwähnt. ABER wenn Sie nicht explizit eine deklarieren, hat es sowieso einen impliziten Konstruktor für "Constructor Chaining" zu arbeiten.

1voto

S.Lott Punkte 371691

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 Superklasse ist abstrakt und hat einen Konstruktor.

10 Stimmen

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.

0 Stimmen

Dies ist ein Kompilierungsfehler ... TimesTwo muss einen Superkonstruktor aufrufen, um diese abstrakte Klasse zu implementieren....

1 Stimmen

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.

1voto

Anilkumar K S Punkte 11

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.

1voto

Arun Raaj Punkte 1638

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.

0voto

karto Punkte 3288

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.com

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.

Powered by:

X