Die Klasse Techniker protected machen und zusammen mit der Klasse Werkstatt in ein eigenes Package stecken. Alle andere Klassen in andere Packages. protected = Sichtbar im selben Package.
edit: Huch das geht ja gar nicht direkt für ne Klasse. Aber du kannst den Konstruktor zumindest protected machen.
@profis: Wieso ist protected eig. nicht möglich für Klassen? Also wäre doch leichter wenn man will das ALLES protected ist in der Klasse. So muss man das überall dazu schreiben.
Auch wenn ich kein Profi bin
: Es geht nicht, weil es gar keinen Sinn macht. Eine protected Klasse würde bedeuten, dass auf diese Klasse nur innerhalb des Packages zugegriffen werden kann, und dass Klassen darauf zugreifen können, die innerhalb des Packages liegen und von ihr erben ... ein wenig doppelgemoppelt und sinnlos
. Und wenn du eine Klasse "protected" machen könntest, würde dass das obige Problem aber auch nicht lösen, da du zwar dann auch nur in diesem Package eine neue Instanz der Klasse erzeugen könntest, aber du auf dieses Objekt/diese Klasse auch nur in diesem Package zugreifen kannst.
Ein proteced oder package Konstruktor wäre hier für dein Problem eine Lösungsmöglichkeit.
Ich bin allerdings nicht so der Fan von Klassen, die zwangsläufig im selben Package liegen müssen, nur damit sie aufeinander zugreifen können und sonst von außen niemand. Je nach Anwendungsfall könnte es auch sinnvoll sein, den Techniker nicht als Klasse darzustellen, sondern als public Interface mit allen benötigten Schnittstellen. Die Klasse, die als einzigste einen "Techniker" erzeugen soll, besitzt eine private static class, die das Techniker-Interface implementiert und somit die Techniker-Klasse darstellt. Die Erzeugerklasse gibt dann bspw. beim Aufruf "Techniker createTechniker()" eine neue Instanz der nested class zurück.
Hätte halt den Nachteil, dass theoretisch noch andere Klassen das Techniker-Interface implementieren könnten. Dies könntest du bei einer finalen Klasse und einem package-sichtbaren Konstruktor umgehen.
Kommt halt immer ein bisschen darauf an, was damit am Ende dargestellt werden soll
.