3 votes

Pourquoi suis-je capable d'appeler une méthode privée ?

Je ne devrais pas pouvoir invoquer une méthode privée d'un objet instancié. Je me demande pourquoi le code ci-dessous fonctionne.

public class SimpleApp2 {
    /**
     * @param args
     */
    private int var1;

    public static void main(String[] args) {
        SimpleApp2 s = new SimpleApp2();
        s.method1(); // interesting?!
    }

    private void method1() {
        System.out.println("this is method1");
        this.method2(); // this is ok
        SimpleApp2 s2 = new SimpleApp2();
        s2.method2(); // interesting?!
        System.out.println(s2.var1); // interesting?!
    }

    private void method2() {
        this.var1 = 10;
        System.out.println("this is method2");
    }
}

Je comprends qu'une méthode privée est accessible depuis l'intérieur de la classe. Mais si une méthode à l'intérieur d'une classe instancie un objet de cette même classe, les règles de portée ne devraient-elles pas s'appliquer à cet objet instancié ?

Une méthode statique comme main peut-elle accéder à un membre non statique de la classe, comme indiqué dans cet exemple ?

0voto

miku Points 63392

Parce que le private limite l'accès à la classe définissant la méthode, et votre main se trouve être dans la même classe.

modificateur privé - le champ n'est accessible que dans sa propre classe.

Voir Modificateurs d'accès dans la documentation Java.

0voto

mkro Points 1480

L'appel que vous lancez provient de la même classe que celle où se trouve votre méthode privée. Ceci est autorisé. C'est ainsi que le terme "private" est défini en Java.

0voto

Ganesan Points 1

Dans le programme, nous avons créé deux instances de la classe en utilisant lesquelles nous avons appelé deux méthodes privées. Il est intéressant de voir comment cela fonctionne car c'est la façon dont nous avons l'habitude d'appeler les méthodes publiques ou par défaut en dehors de sa classe en utilisant la référence objet. Dans ce cas, tout est fait à l'intérieur de la définition de la classe, donc c'est valide. Le même code placé en dehors de la classe entraînera une erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X