Wann verwende ich in Java einen public-Konstruktor?
Was ist genau der Unterschied zwischen einem mit public gekennzeichneten Konstruktor und einem ohne Kennzeichnung?
(Sicherlich die Sichtbarkeit, aber die Anwendung sehe ich nicht!)
Hi,
Wann verwende ich in Java einen public-Konstruktor?
Wenn Du beabsichtigst, dass ein Objekt der Klasse gebildet werden kann. Viele Klassen haben mehrere public-Konstruktoren. Hier spielt natürlich auch die Sichtbarkeit eine Rolle. Public Konstruktoren sind immer sichtbar, d.h. man kann immer ein Objekt Deiner Klasse erzeugen.
Was ist genau der Unterschied zwischen einem mit public
gekennzeichneten Konstruktor und einem ohne Kennzeichnung?
(Sicherlich die Sichtbarkeit, aber die Anwendung sehe ich
nicht!)
Nagel auf den Kopf getroffen - Es kann z.B. sein, dass Du einen Konstruktor haben willst, der nicht allen, sondern nur Unterklassen dieser Klasse oder nur der Klasse selbst zugänglich sein soll. Man kann so z.B. seinen public Konstruktor auf einen private Konstruktor zurückführen (macht natürlich erst Sinn, wenn Du mehrere public Konstruktoren hast oder wenn Du in der Klasse selbst ein Objekt mit Hilfe des private Konstruktors erzeugen willst).
Grüsse,
Franz Prilmeier
Wann verwende ich in Java einen public-Konstruktor?
Was ist genau der Unterschied zwischen einem mit public
gekennzeichneten Konstruktor und einem ohne Kennzeichnung?
(Sicherlich die Sichtbarkeit, aber die Anwendung sehe ich
nicht!)
Konstruktoren, Variablen und Methoden, die keinen modifizierer für die Sichtbarkeit besitzen nennt man auch ‚friendly‘. Alles was friendly definiert ist, darf nur innerhalb des selben Paketes benutzt werden. Nützlich ist das z.B. wenn ein Hersteller von Paketen (z.B. Framework für irgendwas) Klassen benötigt, die ausschließlich für den paket-internen Gebrauch vorgesehen sind.
Ein konkretes Beispiel für einen Konstruktor, der nicht public sondern private ist, ist zum Beispiel das Pattern „Singleton“ (deutsch: Entwurfsmuster Einzelstück). Der Sinn hinter diesem Entwurfsmuster ist der, dass es im gesamten Programm nur ein Objekt dieser Klasse geben soll. Anwendung währe z.B. ein Objekt zum mitloggen von Meldungen in einer Datei, auf dem Bildschirm oder übers Netzwerk …
Dabei ist natürlich unerwünscht, dass IRGENDWO im Code ein
Singleton s=new Singleton();
auftaucht und evtl. mehrere Instanzen erzeugt werden. Macht man den Konstruktor private wird das vom Compiler sichergestellt.
Und wie kommt man nun an die eine Instanz?? Hierfür wird in der Klasse selbst die folgende Klassenvariable und folgende statische Methode definiert:
static Singleton theOneAndOnly=null;
static Singleton getSingleton() {
if( theOneAndOnly == null ) theOneAndOnly=new Singleton();
return theOneAndOnly;
}
Gruß
Benky