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?

2voto

akhil_mittal Punkte 20953

Eine abstrakte Klasse kann einen Konstruktor haben, obwohl sie nicht instanziiert werden kann. Aber der Konstruktor, der in einer abstrakten Klasse definiert ist, kann für die Instanziierung einer konkreten Klasse dieser abstrakten Klasse verwendet werden. Prüfen Sie JLS :

Es ist ein Kompilierfehler, wenn versucht wird, eine Instanz einer abstrakten Klasse mit Hilfe einer Klasseninstanzerstellung zu erzeugen Ausdruck .

Eine Unterklasse einer abstrakten Klasse, die selbst nicht abstrakt ist, kann instanziiert werden, was zur Ausführung eines Konstruktors für die abstrakten Klasse und damit zur Ausführung der Feldinitialisierer für Instanzvariablen dieser Klasse.

2voto

supercat Punkte 72939

In einer konkreten Klasse werden durch die Deklaration eines Konstruktors für einen konkreten Typ Fnord effektiv zwei Dinge offengelegt:

  • Ein Mittel, mit dem Code die Erstellung einer Instanz von Fnord anfordern kann

  • Ein Mittel, mit dem eine Instanz eines von Fnord abgeleiteten Typs die sich im Aufbau befindet, kann verlangen, dass alle Merkmale der Basisklasse initialisiert werden.

Obwohl es vielleicht ein Mittel geben sollte, mit dem diese beiden Fähigkeiten getrennt gesteuert werden können, wird eine Definition für jeden konkreten Typ beides ermöglichen. Obwohl die erste Fähigkeit für eine abstrakte Klasse nicht sinnvoll ist, ist die zweite Fähigkeit für eine abstrakte Klasse genauso sinnvoll wie für jede andere, und daher ist ihre Deklaration genauso notwendig und nützlich.

2voto

Shubhamhackz Punkte 5772

Ja, eine abstrakte Klasse kann einen Konstruktor haben. Sie können in einer abstrakten Klasse so viele Konstruktoren überladen, wie Sie wollen. Diese Konstruktoren können verwendet werden, um den Anfangszustand der Objekte zu initialisieren, die die abstrakte Klasse erweitern. Wie wir wissen, können wir kein Objekt einer abstrakten Klasse erstellen, da Objekte durch die "new"-Schlüsselwörter und nicht durch die Konstruktoren erstellt werden... sie sind nur dazu da, den Zustand der Unterklassenobjekte zu initialisieren.

2voto

jaideep Punkte 1571

Wie von javafuns beschrieben aquí Dies ist ein Beispiel:

public abstract class TestEngine
{
   private String engineId;
   private String engineName;

   public TestEngine(String engineId , String engineName)
   {
     this.engineId = engineId;
     this.engineName = engineName;
   }
   //public gettors and settors
   public abstract void scheduleTest();
}

public class JavaTestEngine extends TestEngine
{

   private String typeName;

   public JavaTestEngine(String engineId , String engineName , String typeName)
   {
      super(engineId , engineName);
      this.typeName = typeName;
   }

   public void scheduleTest()
   {
     //do Stuff
   }
}

6 Stimmen

Ausgeschnitten und eingefügt aus geekinterview.com/question_details/77988 . Plagiate sind nicht cool.

2voto

chamzz.dot Punkte 500

Ja, das ist es. Und ein Konstruktor einer abstrakten Klasse wird aufgerufen, wenn eine Instanz einer geerbten Klasse erstellt wird. Zum Beispiel ist das folgende ein gültiges Java-Programm.

// An abstract class with constructor
abstract class Base {
Base() { System.out.println("Base Constructor Called"); }
abstract void fun();
    }
class Derived extends Base {
Derived() { System.out.println("Derived Constructor Called"); }
void fun() { System.out.println("Derived fun() called"); }
    }

class Main {
public static void main(String args[]) { 
   Derived d = new Derived();
    }

}

Dies ist die Ausgabe des obigen Codes,

Basis-Konstruktor wird aufgerufen Abgeleiteter Konstruktor aufgerufen

Referenzen: Linkbeschreibung hier eingeben

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