2010-12-30 7 views

Antwort

1

Modifikatoren gelten für Konstruktoren wie Felder und Methoden.

  1. Wenn es public ist, kann jede Klasse Zugang und sehen es.
  2. Wenn es private ist, kann keine andere Klasse außerhalb dieser Klasse Zugriff oder siehe es.

Read more about access control at documentation

Allgemeinen Konstrukteure sind private gemacht, wenn Sie Fabrik verwenden Muster oder Muster Singleton

+1

Insbesondere siehe Abschnitt "Tipps zur Auswahl einer Zugriffsebene". – Raedwald

+0

'private' Konstruktoren für das" Factory "-Muster? Sie meinen statische Factory [creation] -Methoden und nicht GoF Abstract Factory (normalerweise nur Fabrik genannt) und Factory Methods. –

+0

@Tom ja Statisches Fabrikmuster –

2

Die Frage enthält die Antwort. Machen Sie den Konstruktor öffentlich, wenn Sie zulassen, dass Ihr Clientcode außerhalb des Pakets Ihr Objekt instanziiert. Wenn Sie dies nicht möchten (weil das Objekt paketspezifisch ist oder das Objekt selbst nicht direkt instanziiert werden kann), verwenden Sie package-private.

Zum Beispiel, wenn Sie einen Client-Code, der ein Car (das ist eine Schnittstelle) und einig Paket com.company.cars enthalten Klassen verwenden soll, die die Car Schnittstelle implementiert (BMW, WV, Opel) und so weiter, dann würden Sie eher eine Fabrik welches die notwendige Car-Implementierung instanziiert. Somit hätte nur die Fabrik Zugriff auf den Konstruktor.

public CarFactory { 
    public Car getCar(CarType carType) { 
    Car result = null; 
    switch(carType) { 
     case BMW: 
     result = new BMW(); 
     case Opel: 
     result = new Opel(); 
    } 
    return result; 
    } 
} 

class BMW implements Car { 
    // package-private constructor 
    BMW(); 
} 
0

"Package private" (Standardzugang), trotz der Standard ist, ist selten eine gute andere Wahl, als auf äußere Klasse/Interface/Enum. Es wäre angemessen für eine abstrakte Klasse mit einem festen Satz von Unterklassen (im selben Paket), ein bisschen wie ein enum Konstruktor in der gleichen enum. Wenn der äußere Typ Paket privat ist, können Sie öffentliche Konstruktoren und Mitglieder lieber öffentlich als einen exotischen Zugriffsmodifikator belassen.