Salut,
Il n'y a jamais redéfinition d'une méthode private :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public class A {
public String getNom() {
return getClass().getSimpleName();
}
public void bidule() {
prefix("bidule");
truc();
}
protected void prefix(String nomMethod) {
System.out.print(getNom()+"."+nomMethod+"(): ");
}
private void truc() {
System.out.println("Je suis A");
}
public static class B extends A {
private void truc() {
System.out.print("Je suis B mais... ");
super.truc();
}
public void machin() {
prefix("machin");
truc();
}
}
public static void main(String[] args) {
new A().bidule();
new B().bidule();
new B().machin();
new C().bidule();
new C().machin();
}
} |
1 2 3 4 5 6 7 8 9 10 11 12
| public class C extends A {
private void truc() {
System.out.println("Je suis C");
}
public void machin() {
prefix("machin");
truc();
}
} |
L'exécution affiche :
A.bidule(): Je suis A
B.bidule(): Je suis A
B.machin(): Je suis B mais... Je suis A
C.bidule(): Je suis A
C.machin(): Je suis C
Si truc() de C rédéfinissait truc() de A, alors C.bidule() devrait afficher "Je suis C". Mais c'est bien truc() de A qui est appelé. Par contre, dans B, la visibilité de la méthode private de A rend bien possible son appel, mais pas sa redéfinition.
Par contre, je ne comprend pas l'histoire de l'interdiction, par propreté ou pas : j'ai bien créé une méthode truc() private dans C qui fait son "truc", alors que celle de A continue de faire le sien (appelée par bidule(), elle continue d'afficher "Je suis A")
Partager