mehrere Klassen in eine einzige Datei : Modifizierer private hier nicht erlaubt
Ich bin nicht in der Lage zu verstehen, warum dieser code nicht kompilieren:
class A {
public static void main(String[] args) {
System.out.println("hi");
}
}
private class B {
int a;
}
Ich bin speichern der Inhalte in einer Datei namens A.java
- und ich bekomme eine Fehlermeldung:
modifier private not allowed here //where I have defined class B
Dies geschieht sowohl, wenn ich versuche, B, privat und geschützt. Kann jemand bitte erklären Sie mir den Grund dafür?
Dank !
InformationsquelleAutor der Frage Jaguar | 2010-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Java Language specification:
Also ja, die private und die geschützte Modifikatoren sind nicht erlaubt für die top-level-Klasse-Deklarationen.
Top-level - Klassen können public sein oder nicht, während
private
undprotected
sind nicht erlaubt. Wenn die Klasse ist als public deklariert, dann kann es bezeichnet werden, von jedem Paket. Sonst kann es nur bezeichnet werden, aus demselben package (namespace).Einem eigenen top-level-Klasse macht nicht viel Sinn, denn es konnte nicht bezeichnet werden, um von jeder Klasse. Es wäre unbrauchbar, per definition.
private
ist OK für die Klassen um eine Klasse, verstellbar, nur ist es umschließenden Klasse.Einen geschützten member der Klasse bezeichnet werden kann: (1) jede Klasse mit dem gleichen Paket und aus (2) eine Unterklasse der umschließenden Klasse. Die Zuordnung dieses Konzept zu top-level-Klassen schwierig ist. Der erste Fall ist abgedeckt durch die top-level-Klasse, die keinen Zugang Modifikatoren. Der zweite Fall ist nicht anwendbar für top-level-Klassen, weil es keine umschließenden Klasse oder etwas anderes aus einem anderen Paket mit einem speziellen Bezug zu dieser Klasse (wie eine Unterklasse). Deshalb denke ich,
protected
ist nicht zulässig, weil es das zugrunde liegende Konzept ist nicht anwendbar für top-level-Klassen.InformationsquelleAutor der Antwort Andreas_D
Machen die B verschachtelt der Eine, wie diese:
Verschieben oder B, um eine separate Datei. Auch können Sie kleben mit den Standard-access-level,
auf diese Weise kann die Klasse zugegriffen werden, die nur innerhalb des Pakets:
InformationsquelleAutor der Antwort Konstantin Burov
privat und geschützt sind bedeutungslos zu werden erlaubt, um eine top-level - (nicht-Mitglied) Klasse/Schnittstelle.
Sie gelten nur für die Schüler, die können Variablen, Konstanten, Konstruktoren, Methoden, Klassen und Schnittstellen.
Warum:
(1) private: Was kann der Sinn/Zweck, wenn wir die Definition einer Klasse als privat. Sollte der Geltungsbereich der privaten zu einigen Bereichen. default-Zugriff ist bereits Paket private. Und niemand will eine Klasse Quelldatei private, (Raten der Grund) kann es nicht sein, ein guter Programmierstil zu erlauben, da java-Anwendungen sind endlich organisiert in der form der Pakete, aber nicht in Bezug auf die Quelle-Dateien. Jede Quelldatei sollte sein, Teil eines Pakets, also Breite/Finale jeder Klasse/interface ist ein Teil von einem Paket, und nicht nur einige .java-Datei. Also nicht anwendbar.
(2) geschützt: Wenn etwas geschützt ist, es sollte nur im Paket und nur an die sub-Klassen in anderen Paketen. So erweitern Sie eine Klasse in einem anderen Paket ist, sollte es verfügbar sein, um alle Klassen in andere Pakete, aber geschützt, sagt die Klasse sollte nur für die Klassen verlängert. Es ist eine Art deadlock-situation. Also nicht anwendbar.
Quelle: Meine Lesungen und Verständnis
InformationsquelleAutor der Antwort Venkataswamy
Gerade keine private/protected Modifizierer überhaupt.
InformationsquelleAutor der Antwort djna
B muss sein eigenes etwas. Platzieren Sie es innerhalb der definition der Klasse A oder eine neue Datei erstellen, B.java, und definieren Sie es, aber dann darf es nicht privat sein.
InformationsquelleAutor der Antwort linuxuser27
Wenn Sie nicht mit dem Schlüsselwort public für die Klasse wird es standardmäßig privat " (sichtbar nur innerhalb der Datei).
Kann es nur eine öffentliche Klasse pro .java-Datei, alle anderen müssen privat sein. So Eine Klasse kann öffentlich sein und Klasse B braucht keine Modifikatoren in deinem Beispiel. Die öffentliche Klasse name muss mit dem .java-Datei-name (zB. A.java nur eine öffentliche Klasse namens "A").
InformationsquelleAutor der Antwort egbokul
A.java
enthalten, nicht zwei Klassen.InformationsquelleAutor der Antwort fastcodejava