Bon, avant tout, je vous dis bonjour à tous !
Voila, il faut que je vous expose un petit souci que j'ai eu et pour ça rien de mieux qu'un peu de code :
Bon, voila. J'ai deux classes, A et B, qui heritent de UneLettre. La classe abstraite UneLettre apporte une methode protected qui affiche le nom de la classe de l'objet courant. La classe A ne fait rien, la classe B introduit une methode de test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public abstract class UneLettre { protected final String getLettre() { return "Lettre "+this.getClass().getName()+" - "+Integer.toHexString(hashCode()); } } public class A extends UneLettre { } public class B extends UneLettre { public void test(A a) { System.out.println("Moi : "+this.getLettre()); System.out.println("Lui : "+a.getLettre()); } }
Voila, ensuite je fais ce petit test :
Et voila ce que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 A _a = new A(); B _b = new B(); System.out.println("test"); _b.test(_a);
Vous allez me dire : oui, et alors ?test
Moi : Lettre javaapplication1.test.B - 42e816
Lui : Lettre javaapplication1.test.A - 9304b1
Alors la methode getLettre est protected ! B ne devrais pas pouvoir faire a.getLettre() !!
Si j'ai bien tout suivi, le mot clé protected donne accès à une methode/variable de classe à tous les héritiers. ok ? Mais néanmoins B et A sont deux objets distincs...
Donc :
- Soit c'est un bug, mais j'ai testé le même code sous PHP et lui aussi est OK
- Soit le mot clé protected donne accès à TOUS les heritiers d'une classe, même si ce sont des objets distincts... Si c'est le cas, les principes de sécurité introduits dans mes applications ne servent à rien...
- J'ai fait une erreur que je n'ai pas vu
Bon, jettez y un petit coup d'oeil et merci d'avance![]()
Partager