Accès en Java
Écrivez une classe Gate dans Gate.java avec un champ private int nommé code, un constructeur Gate(int n) qui fait code = n;, et une méthode void show() qui affiche code. Dans Pier.java, construisez un gate avec Gate g = new Gate(9);, puis appelez g.show();. Compilez les deux fichiers et lancez java Pier. L'écran doit montrer une ligne : 9. Le champ est caché à Pier. La méthode sur Gate peut encore le lire. Mettre private sur le champ est ce que cette page enseigne.
Un champ que Pier ne doit pas nommer directement
Jusqu'ici d'autres classes dans le même dossier pouvaient souvent atteindre des champs comme j.fill ou t.size quand ces champs n'avaient pas de mot d'accès. Le mot private change cela. Un champ private appartient à la classe qui le déclare. Les méthodes à l'intérieur de cette même classe peuvent utiliser le champ. Une autre classe — ici Pier — ne doit pas écrire g.code.
Créez d'abord Gate.java. La ligne public class est public class Gate. Ne laissez pas un ancien nom de classe Tag ou Jar ici. À l'intérieur des accolades déclarez private int code;. Écrivez le constructeur Gate(int n) { code = n; } avec des noms différents pour que cette page n'ait pas besoin de this. Puis écrivez :
void show() { System.out.println(code); }
Il n'y a pas de main dans Gate.java. Enregistrez avant de compiler. La méthode show siège dans la même classe que code, donc elle peut lire le champ private. C'est le chemin autorisé sur cette page.
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier appelle show, pas g.code
Créez Pier.java dans le même dossier. Sa ligne public class est public class Pier. Dans main, écrivez Gate g = new Gate(9); puis g.show();. N'écrivez pas System.out.println(g.code); sur cette page. Si vous lisez g.code depuis Pier alors que code est private, javac refuse.
Gardez Pier comme la classe qui contient main. Ne mettez pas main dans Gate pour cette leçon. Si un fichier Yard restant de la page static est encore dans le dossier, ne lancez pas java Yard pour cette leçon — lancez java Pier après avoir compilé Gate.java et Pier.java.
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
Depuis le dossier qui contient les deux fichiers, lancez javac Gate.java Pier.java. Vous pouvez compiler Gate.java d'abord et Pier.java ensuite quand les deux sont complets. Quand parenthèses, accolades et points-virgules correspondent, javac n'écrit aucune ligne de son côté. Puis lancez java Pier — pas java Pier.java, et pas java Gate. Enlevez la fin .java de la commande de lancement. Démarrez la classe qui contient main. Les mêmes commandes fonctionnent sous Windows et macOS.
Le programme doit afficher une ligne et s'arrêter : 9. Il ne doit pas attendre que vous tapiez. Si le terminal attend le clavier, un appel nextLine d'un ancien exercice est encore dans un fichier. Supprimez-le et gardez new Gate(9) avec g.show(); dans Pier, et private int code dans Gate.
Parcourez l'exécution une fois. Java démarre à Pier.main. L'expression new Gate(9) construit un gate et place 9 dans code à l'intérieur du constructeur. L'appel g.show() entre dans show sur le même objet. À l'intérieur de Gate, show peut lire code et affiche 9. Pier n'a jamais nommé le champ. L'écran montre 9.
Si vous écrivez System.out.println(g.code); dans Pier à la place de g.show();, javac s'arrête avec une erreur d'accès tant que code est private. Ce refus est le point de cette page. Remettez g.show();.
Comparé avec static et avec les champs ouverts
Sur la page static vous appeliez Tag.ping(); sans champ caché. Cela fonctionne encore. Cette page cache un champ et laisse une méthode ouverte. Une démo restante Tag.ping(); est une autre leçon. Pour cette page gardez Gate et Pier et g.show();.
Les pages précédentes laissaient souvent les champs sans private, donc j.fill depuis une autre classe compilait. Cette forme plus lâche apparaît encore dans de petites démos. Cette leçon choisit private exprès pour que vous voyiez la frontière. Afficher g seul avec System.out.println(g); ne montre pas un 9 propre. Appelez g.show(); ou imprimez via une méthode que la classe autorise.
Deux gates, deux codes
Chaque new Gate(...) garde son propre code private. Vous pouvez écrire Gate a = new Gate(2); et Gate b = new Gate(8);, puis appeler a.show(); et b.show();.
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
Compilez et lancez à nouveau : javac Gate.java Pier.java, puis java Pier. L'écran doit montrer 2 sur une ligne et 8 sur la suivante. Chaque appel show a tourné sur son propre objet et a lu le champ private de cet objet. Écrire Gate b = a; ne construit pas un second objet — utilisez deux appels new Gate(...) quand vous voulez deux codes.
Si les deux lignes montrent le même nombre, vérifiez que chaque new passe un argument différent. Si javac se plaint de code dans Pier, vous avez encore une ligne directe g.code — enlevez-la et gardez show.
Ce que cela laisse pour packages
Cette page garde les deux fichiers dans le même dossier avec la disposition de paquet par défaut. Une page plus tard — packages — place les classes dans des dossiers nommés avec des lignes package. Restez ici avec private et show. N'inventez pas un tableau complet public/protected sur cette page ; le but de la leçon est un champ private et une méthode qui peut encore le lire.
Si javac ne trouve pas Gate en compilant Pier.java, vérifiez que Gate.java est dans le même dossier et que la ligne de classe est public class Gate. Quand le dossier tient encore Tag.java ou Yard.java, laissez-les ou supprimez-les seulement s'ils embrouillent votre commande de compilation. Lancez java Pier après avoir compilé la paire Gate et Pier de cette leçon.
Avant packages
Vous pouvez déclarer private int code;, écrire Gate(int n) { code = n; } et void show() { System.out.println(code); }, et depuis Pier lancer Gate g = new Gate(9); puis g.show();. Compilez les deux fichiers et lancez java Pier. L'écran montre 9. Le champ private est resté dans Gate. La méthode de la même classe l'a affiché. La page suivante est packages, où vous placez les classes dans des dossiers de paquet nommés.
Gardez private sur le champ. Gardez l'affichage dans show, pas sous forme de g.code depuis Pier. Gardez main dans Pier. Ces trois habitudes sont le point de contrôle de cette page avant d'avancer. Quand l'écran montre 9 via show, vous avez franchi la frontière d'accès comme cette leçon le veut.
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut