[Java] Ich habe versucht, den öffentlichen und nicht angegebenen Feldzugriffsmodifikator aufzurufen. [Eclipse]

Zugriffsmodifikatoren für Klassen

Zugriffsqualifizierer Beschreibung

öffentlich von überall zugänglich Nicht spezifiziert | Nur innerhalb desselben Pakets zugänglich

Für Mitglieder verwendete Zugriffsmodifikatoren (Feldmethoden)

Zugriffsqualifizierer Beschreibung

öffentlich von überall zugänglich geschützt | innerhalb desselben Pakets und vor Unterklassen zugänglich Nicht spezifiziert | Nur innerhalb desselben Pakets zugänglich privat | Nur innerhalb derselben Klasse zugänglich

Was ist, wenn die Klasse nicht spezifiziert ist und die Mitglieder privat sind?

Die erstellte Datei lautet wie folgt.

Klasse Dateiname
Hauptklasse Modifier.java (Hauptordner)
öffentliche Klasse Pub.java (Testordner)
Nicht spezifizierte Klasse None.java (Testordner)

Modifier.Java (Liste der Hauptmethode)


package main;

import test.None; //Zur Laufzeit in Eclipse entfernt
import test.Pub;
public class Modifier {

	public static void main(String[] args) {
		Pub pubclass = new Pub();
		None noneclass = new None();
		System.out.println(pubclass.pubpub);
		System.out.println("Greifen Sie auf geschützte Felder der öffentlichen Klasse zu");
		System.out.println(pubclass.pubpro);
		System.out.println("Greifen Sie auf nicht angegebene Felder in der öffentlichen Klasse zu");
		System.out.println(pubclass.pubnone);
		System.out.println("Greifen Sie auf das private Feld der öffentlichen Klasse zu");
		System.out.println(pubclass.pubpri);
		System.out.println("Greifen Sie auf öffentliche Felder einer nicht angegebenen Klasse zu");
		System.out.println(noneclass.nonepub);
		System.out.println("Greifen Sie auf geschützte Felder einer nicht angegebenen Klasse zu");
		System.out.println(noneclass.nonepro);
		System.out.println("Greifen Sie auf nicht angegebene Felder in einer nicht angegebenen Klasse zu");
		System.out.println(noneclass.nonenone);
		System.out.println("Greifen Sie auf private Felder einer nicht angegebenen Klasse zu");
		System.out.println(noneclass.nonepri);
	}
}

Pub.java


package test;

public class Pub {
	public String pubpub = "pubpub";
	protected String pubpro = "public proteced";
	String pubnone = "public none";
	private String pubpri = "pubpri";
}

None.java


package test;

class None {
	public String nonepub = "nonepub";
	protected String nonepro = "nonepro";
	String none = "nonenone";
	private String nonepri = "nonepri";
}

Anonyme Klassen können nicht importiert werden!

Wie ich im obigen Kommentar in Modifier.java geschrieben habe


import test.None;

Es wurde geschrieben, aber es wurde gelöscht, als ich es in Eclipse ausführte. Die Fehlermeldung auf der Konsole

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Keine kann nicht zum Eingeben aufgelöst werden
Keine kann nicht zum Eingeben aufgelöst werden
Field Pub.pubpro ist unsichtbar
Field Pub.Pubnone ist unsichtbar
Field Pub.pubpri ist unsichtbar

	at main.Modifier.main(Modifier.java:8)

Es gibt kein Problem, wenn es öffentlich ist

Pub.java


//Andere als öffentlich auskommentiert
package test;

public class Pub {
	public String pubpub = "pubpub";
//	protected String pubpro = "public proteced";
//	String pubnone = "public none";
//	private String pubpri = "pubpri";
}

None.java


//Öffentlicher Modifikator zur Klasse hinzugefügt
//Andere als öffentlich auskommentiert
package test;

public class None {
	public String nonepub = "nonepub";
//	protected String nonepro = "nonepro";
//	String none = "nonenone";
//	private String nonepri = "nonepri";
}

Modifier.java


//Ich habe die gesamte Ausgabe auskommentiert
//Wurde hinzugefügt, um nur das öffentliche Qualifikationsfeld des Pakets aufzurufen

package main;

import test.None; //Da es sich um eine öffentliche Klasse handelt, kann sie importiert werden, ohne gelöscht zu werden
import test.Pub;
public class Modifier {

	public static void main(String[] args) {
		Pub pubclass = new Pub();
		None noneclass = new None();
		System.out.println(pubclass.pubpub);
		System.out.println(noneclass.nonepub);
		
//		System.out.println(pubclass.pubpub);
//		System.out.println("Greifen Sie auf geschützte Felder der öffentlichen Klasse zu");
//		System.out.println(pubclass.pubpro);
//		System.out.println("Greifen Sie auf nicht angegebene Felder in der öffentlichen Klasse zu");
//		System.out.println(pubclass.pubnone);
//		System.out.println("Greifen Sie auf das private Feld der öffentlichen Klasse zu");
//		System.out.println(pubclass.pubpri);
//		System.out.println("Greifen Sie auf öffentliche Felder einer nicht angegebenen Klasse zu");
//		System.out.println(noneclass.nonepub);
//		System.out.println("Greifen Sie auf geschützte Felder einer nicht angegebenen Klasse zu");
//		System.out.println(noneclass.nonepro);
//		System.out.println("Greifen Sie auf nicht angegebene Felder in einer nicht angegebenen Klasse zu");
//		System.out.println(noneclass.nonenone);
//		System.out.println("Greifen Sie auf private Felder einer nicht angegebenen Klasse zu");
//		System.out.println(noneclass.nonepri);
	}
}

Ausführungsergebnis


pubpub
nonepub

Sie können es jetzt fehlerfrei ausführen.

Fazit

Ich denke, das wird der Fall sein.

Eine nicht bezeichnete Klasse schützt die Eisenwand Selbst in der öffentlichen Klasse bewachen andere Mitglieder als die Öffentlichkeit die Eisenmauer

Ist das in Ordnung?

Nicht spezifizierte Klassen können nicht außerhalb des Pakets verwendet werden, daher können sie nur innerhalb des Pakets verwendet werden. Ich frage mich daher, ob sie für die Vererbung verwendet werden, z. B. abstrakte Klassen. Das Gebiet ist immer noch nicht eindeutig, aber ...

Als ich in Eclipse schrieb, wurde ich jedes Mal durch eine rote Wellenlinie über den Fehler informiert. Es hat sich gelohnt zu schreiben, nur um seine Bequemlichkeit zu erkennen.

Banners_and_Alerts_と_Modifier_src_main_Modifier_java_-_Users_onoharamakoto_Desktop-_Eclipse_IDE.png

Vorerst Ich hoffe es wird für Anfänger hilfreich sein!

Recommended Posts

[Java] Ich habe versucht, den öffentlichen und nicht angegebenen Feldzugriffsmodifikator aufzurufen. [Eclipse]
Zugriffsmodifikator [Java]
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, Java-Anfänger so einzustellen, dass sie Tastenkombinationen in Eclipse verwenden
Ich habe versucht, die Fehlermeldung beim Ausführen von Eclipse (Java) zu übersetzen.
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Ich habe PHP- und Java-Konstruktoren verglichen
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe Java und Rubys FizzBuzz verglichen.
Ich habe versucht, Google HttpClient von Java zu verwenden
[Java Silver] Zusammenfassung der Zugriffsmodifikatorpunkte
Beziehung zwischen Kotlin- und Java-Zugriffsmodifikatoren
Ich habe Cassandras Object Mapper für Java ausprobiert
JAVA Learning History Final Modifier und Static Modifier
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Java9 war enthalten, also habe ich jshell ausprobiert.
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Laden Sie Eclipse (Java) herunter und installieren Sie es (Mac-Version)
Ich habe Googles Aufnahmeprüfung (inoffiziell) [Java] ausprobiert.
Ich habe eine Java EE-Umgebung auf AWS erstellt und versucht, eine Webanwendung auszuführen