[Java] J'ai essayé le modificateur d'accès public et l'accès au champ non spécifié [Eclipse]

Modificateurs d'accès utilisés pour les classes

Qualificatif d'accès Description
public accessible de n'importe où
Non spécifié Accessible uniquement à partir du même package

Modificateurs d'accès utilisés pour les membres (méthodes de champ)

Qualificatif d'accès Description
public accessible de n'importe où
protected accessible dans le même package et à partir des sous-classes
Non spécifié Accessible uniquement à partir du même package
privé Uniquement accessible depuis la même classe

Que faire si la classe n'est pas spécifiée et que les membres sont privés?

Le fichier créé est le suivant.

Classe Nom de fichier
classe principale Modifier.java (dossier principal)
classe publique Pub.java (dossier de test)
Classe non spécifiée None.java (dossier de test)

Modifier.java (lister la méthode principale)


package main;

import test.None; //Supprimé lors de l'exécution dans Eclipse
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("Accéder aux champs protégés de la classe publique");
		System.out.println(pubclass.pubpro);
		System.out.println("Accéder à des champs non spécifiés en classe publique");
		System.out.println(pubclass.pubnone);
		System.out.println("Accéder au champ privé de la classe publique");
		System.out.println(pubclass.pubpri);
		System.out.println("Accéder aux champs publics de classe non spécifiée");
		System.out.println(noneclass.nonepub);
		System.out.println("Accéder aux champs protégés d'une classe non spécifiée");
		System.out.println(noneclass.nonepro);
		System.out.println("Accéder à des champs non spécifiés dans une classe non spécifiée");
		System.out.println(noneclass.nonenone);
		System.out.println("Accéder aux champs privés d'une classe non spécifiée");
		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";
}

Les classes anonymes ne peuvent pas être importées!

Comme je l'ai écrit dans le commentaire ci-dessus, dans Modifier.java


import test.None;

Il a été écrit, mais il a été supprimé lorsque je l'ai exécuté dans Eclipse. Le message d'erreur sur la console

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Impossible de résoudre Aucun pour taper
Impossible de résoudre Aucun pour taper
Pub sur le terrain.pubpro est invisible
Pub sur le terrain.pubnone est invisible
Pub sur le terrain.pubpri est invisible

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

Il n'y a pas de problème s'il est public-public

Pub.java


//Commenté autrement qu'en public
package test;

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

None.java


//Ajout d'un modificateur public à la classe
//Commenté autrement qu'en public
package test;

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

Modifier.java


//J'ai commenté toute la sortie
//Ajouté pour appeler uniquement le champ qualificatif public du package

package main;

import test.None; //Puisqu'il s'agit d'une classe publique, elle peut être importée sans être effacée
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("Accéder aux champs protégés de la classe publique");
//		System.out.println(pubclass.pubpro);
//		System.out.println("Accéder à des champs non spécifiés en classe publique");
//		System.out.println(pubclass.pubnone);
//		System.out.println("Accéder au champ privé de la classe publique");
//		System.out.println(pubclass.pubpri);
//		System.out.println("Accéder aux champs publics de classe non spécifiée");
//		System.out.println(noneclass.nonepub);
//		System.out.println("Accéder aux champs protégés d'une classe non spécifiée");
//		System.out.println(noneclass.nonepro);
//		System.out.println("Accéder à des champs non spécifiés dans une classe non spécifiée");
//		System.out.println(noneclass.nonenone);
//		System.out.println("Accéder aux champs privés d'une classe non spécifiée");
//		System.out.println(noneclass.nonepri);
	}
}

Résultat d'exécution


pubpub
nonepub

Vous pouvez maintenant l'exécuter sans aucune erreur.

Conclusion

Je pense que ce sera le cas.

Une classe non désignée protège le mur de fer Même dans la classe publique, des membres autres que le public gardent le mur de fer

Est-ce que tout va bien?

Les classes non spécifiées ne peuvent pas être utilisées en dehors du package, donc elles ne peuvent être utilisées qu'à l'intérieur du package, donc je me demande si elles sont utilisées pour l'héritage, comme les classes abstraites. Le quartier est encore ambigu, mais ...

En premier lieu, lorsque j'écrivais dans Eclipse, une ligne ondulée rouge m'a signalé l'erreur à chaque fois. Cela valait la peine d'écrire juste pour se rendre compte de sa commodité.

Banners_and_Alerts_と_Modifier_src_main_Modifier_java_-_Users_onoharamakoto_Desktop-_Eclipse_IDE.png

Pour le moment J'espère que cela sera utile pour les débutants!

Recommended Posts

[Java] J'ai essayé le modificateur d'accès public et l'accès au champ non spécifié [Eclipse]
Modificateur d'accès [Java]
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé Drools (Java, InputStream)
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai essayé d'utiliser Java REPL
J'ai essayé la métaprogrammation avec Java
J'ai essayé de configurer les débutants Java pour qu'ils utilisent des touches de raccourci dans eclipse
J'ai essayé de traduire le message d'erreur lors de l'exécution d'Eclipse (Java)
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé d'afficher le calendrier sur la console Eclipse en utilisant Java.
J'ai comparé les constructeurs PHP et Java
J'ai essayé la communication UDP avec Java
J'ai essayé le framework Java "Quarkus"
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé d'utiliser JWT en Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai comparé Java et Ruby FizzBuzz.
J'ai essayé d'utiliser Google HttpClient de Java
[Java Silver] Résumé des points de modification d'accès
Relation entre les modificateurs d'accès kotlin et java
J'ai essayé le mappeur d'objets de Cassandra pour Java
Modificateur final et modificateur statique de l'historique d'apprentissage JAVA
J'ai essayé de résumer les expressions Java lambda
Java9 était inclus, j'ai donc essayé jshell.
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
Téléchargez et installez Eclipse (Java) (version Mac)
J'ai essayé l'examen d'entrée de Google (non officiel) [java]
J'ai créé un environnement Java EE sur AWS et essayé d'exécuter une application Web