Privater Konstruktor und öffentlicher Parameterkonstruktor

8

Ich habe gehört, dass ein privater Konstruktor die Erzeugung von Objekten von außen verhindert.

Wenn ich einen Code habe

%Vor%

Hier kann ich noch einen öffentlichen Konstruktor (Parameter) deklarieren, wird es nicht den Zweck des privaten Konstruktors verderben? Wann benötigen wir sowohl privaten als auch öffentlichen Konstruktor (Parameter) im Code?

Ich brauche bitte eine detaillierte Erklärung.

    
Amutha 14.04.2010, 18:56
quelle

5 Antworten

5

Der Grund für die Verwendung des Musters, das Sie beschreiben, ist, wann Sie wie das Objekt instanziiert werden soll.

In Ihrem Beispiel sagen Sie beispielsweise, dass die Methode only zum Erstellen eines Produkts nur durch Angabe von Name und Preis erfolgt. Dies gilt natürlich für die Außenwelt. Sie könnten auch etwas Ähnliches mit anderen Zugriffsmodifizierern machen, und das hätte verschiedene Auswirkungen, aber es läuft alles darauf hinaus, zu steuern, wie die Objekte in Bezug auf die Instanz instanziiert werden sollen.

Wenn Sie die gesamte Erstellung von Objekten verhindern möchten, müssen Sie alle Konstruktoren als privat (oder geschützt) definieren. Dies würde dazu führen, dass das Objekt in sich selbst (oder einer geerbten Klasse) erstellt wird.

Wie Matti im folgenden Kommentar ausgeführt hat, müssen Sie beim Definieren eines Konstruktors, der parametrisiert ist, keinen privaten Standardkonstruktor angeben. An diesem Punkt ist es impliziert.

    
Joseph 14.04.2010, 18:59
quelle
4

Konstruktoren können miteinander verkettet werden, um zu vermeiden, dass Code dupliziert wird. Daher ist es üblich, private Konstruktoren zu verwenden, die außerhalb der Klasse aufgerufen werden sollen, aber dass jeder öffentliche Konstruktor dann nur kettet zu.

Beispiel:

%Vor%

Hier gibt es zwei öffentliche Konstruktoren, von denen der eine eine Zeichenkette und der andere ein int nimmt, und beide verketten sich zu dem allgemeinen privaten Konstruktor, der beide Argumente akzeptiert.

Natürlich können Sie auch neue Objekte innerhalb derselben Klasse konstruieren, indem Sie den privaten Konstruktor verwenden. Beispielsweise möchten Sie vielleicht, dass spezialisierte Konstruktoren nur über statische Factory-Methoden verfügbar sind:

%Vor%

Hier ist es möglicherweise keine gute Idee, den privaten Konstruktor der Außenwelt zugänglich zu machen, sondern stattdessen eine statische Factory-Methode hinzuzufügen, die die richtigen Argumente für die Übergabe des Konstruktors abruft.

    
quelle
2

Sie benötigen einen privaten Konstruktor, wenn Sie nur möchten, dass dieser Konstruktor von der Klasse selbst aufgerufen wird. In Ihrem Beispiel erzwingen Sie, dass das aufrufende Objekt beim Erstellen des Objekts 2 Parameter bereitstellt.

Mit einem privaten Konstruktor könnten Sie etwas tun wie:

%Vor%

, aber nichts anderes als das Objekt könnte den parameterlosen Konstruktor aufrufen.

Es wird häufig verwendet, um ein Singleton-Muster zu erstellen:

Ссылка

    
kemiller2002 14.04.2010 18:59
quelle
0

Sie würden einen Konstruktor mit Parametern verwenden, wenn Sie möchten, dass Aufrufcode einen Wert an den Konstruktor übergibt, um eine Instanz Ihrer Klasse zu erstellen. In Ihrem Beispiel muss der Aufrufcode die Parameterversion des Konstruktors verwenden, um ein Product zu erstellen.

    
Thomas 14.04.2010 18:59
quelle
0

Ein privater Konstruktor ist ein spezieller Instanzkonstruktor. Es wird häufig in Klassen verwendet, die nur statische Elemente enthalten. Wenn eine Klasse über einen oder mehrere private Konstruktoren und keine öffentlichen Konstruktoren verfügt, dürfen andere Klassen (außer verschachtelte Klassen) keine Instanzen dieser Klasse erstellen.

Weitere Details finden Sie hier: Ссылка

    
ajdams 14.04.2010 19:01
quelle

Tags und Links