denke ich in diesem Fall besteht keine Notwendigkeit, einen öffentlichen Konstruktor zu erklären, da die Klasse sowieso nicht zugänglich außerhalb des Pakets ist. Aber gibt es versteckte Auswirkungen, wenn die Klasse nur privaten Konstruktor hat?Sollen wir einen öffentlichen Konstruktor deklarieren, wenn die Klasse als Paket privat deklariert ist?
Antwort
Nein, Sie müssen nicht den öffentlichen Konstruktor zu erklären; Paket private Konstruktoren werden genauso nutzbar sein. Klassen außerhalb des Pakets könnten den Konstruktor sowieso nicht verwenden, da sie die Klasse nicht sehen können.
Wenn Ihre Klasse Paket privat ist, sind die Zugriffsebenen, die durch das Schlüsselwort public
zusammen mit dem Standard Paket private Zugriffsebene des Konstruktors angezeigt werden, äquivalent.
Sie können jedoch angeben, das Verhalten Sie Absicht, das Verfahren zu haben, falls die Klasse Sichtbarkeit während der Entwicklung verändert wird. Dies kann passieren, wenn Sie einige APIs öffnen, die zuvor intern waren. In diesem Fall sieht es eher konservativ aus, den Konstruktor als Paket privat zu deklarieren, da Sie nicht alle Türen gleichzeitig öffnen.
Hi Denis R. Ich habe einige umfangreiche Änderungen vorgenommen, um die Antwort lesbarer zu machen. Könnten Sie schnell darüber blättern und zurückrollen, wenn Sie nicht einverstanden sind? –
Das ist gut für mich, danke Maarten –
Wir können einen Konstruktor nicht in einer privaten Klasse publizieren, da auf private Klasse nicht zugegriffen werden kann und auf keine seiner Methoden zugegriffen werden kann und da Konstruktoren spezielle Memberfunktionen sind, so dass auch von außen nicht zugegriffen werden kann Öffentlichkeit, weil es letztlich die private Definition der Klasse verletzt
Konstrukteurs kann nicht im privaten Teil der Klasse definiert werden. Der Compiler lässt dies nicht zu, da für Mitglieder, die als privat definiert sind, das Hauptprogramm keinen Zugriff hat. Wann immer wir es anrufen, ist es nur für die Klasse zugänglich, in der wir es oder das Freund-Label definieren. Der Compiler gibt den Namen des Konstruktors an, auf den nicht zugegriffen werden kann.
- 1. Warum ist der Konstruktor String() nicht privat?
- 2. Soll der Konstruktor einer privaten inneren Klasse als öffentlich oder privat deklariert werden?
- 3. Ist es in Ordnung, Destruktor als privat zu deklarieren?
- 4. Konstruktor privat machen
- 5. Scala-Fall-Klasse privaten Konstruktor ist nicht privat
- 6. Privat vs öffentlichen Variablen
- 7. Sollen Methoden, die reine virtuelle Methoden einer Interface-Klasse implementieren, auch als virtuell deklariert werden?
- 8. std :: is_default_constructible <T> Fehler, wenn Konstruktor privat ist
- 9. Erfordern JUnit4-Testklassen einen öffentlichen arg-Konstruktor?
- 10. Sollen wir die Länderliste sortieren?
- 11. Sollen meine C++ - Inline-Methoden explizit als Inline deklariert werden?
- 12. Wann sollte ein Konstruktor öffentlich werden und wann sollte er paket-privat sein?
- 13. Warum wird die Klasse java.util.Scanner als 'final' deklariert?
- 14. Warum wird dieses Feld als privat und auch schreibgeschützt deklariert?
- 15. Warum mussten wir oben im Code ein Paket deklarieren?
- 16. Was geschieht im Hintergrund, wenn wir einen Zeiger auf ein Objekt einer Klasse mit Membervariable als Referenz
- 17. Deklariert eine Variable in C# als "privat", um den Speicher in Windows vor dem Zugriff durch einen Speicherscanner zu schützen?
- 18. kann ich keine Paket-Privat-Klasse in Scala hazeln?
- 19. Der Fall, wenn die Kopie-Konstruktor implizit als gelöscht
- 20. C++ Ist privat wirklich privat?
- 21. Ableiten von Klasse deklariert in privaten Bereich
- 22. Sollen Member in der Klasse oder im Konstruktor initialisiert werden?
- 23. Warum ist die Hauptmethode privat?
- 24. Deklarieren einer öffentlichen Typ Alias für eine innere Klasse
- 25. können wir nur Konstruktor in der Elternklasse deklarieren und in einer anderen Klasse in Java definieren?
- 26. kann Konstruktor nicht als geschützt oder privat definieren! Warum?
- 27. Sealed Class - Warum den öffentlichen Konstruktor entfernen?
- 28. "PDM" ist "nicht deklariert" als eine Klasse von SqlClient.SqlDataReader
- 29. Warum wird die Klasse in Java als statisch deklariert?
- 30. Wofür braucht JAXB einen öffentlichen No-Arg-Konstruktor?
Eine verwandte Frage an Dich zu denken. Sollte eine öffentliche abstrakte Klasse einen öffentlichen oder geschützten Konstruktor haben? –