[Certification] private et protected, question
Je suis en train de préparer ma certification JAVA programmer 1.5 .
Donc, j'achète un bouquin, la référence en la matière.
Seulement je tombe sur un truc qui me semble bizarre. Je cours vérifier sur Eclipse et j'ai un résultat contradictoire avec le livre...
Explication :
Dans le bouquin, je vois :
Citation:
"An instance may read and write protected fields that it inherits from its superclass. However, the instance may not read or write protected inherited fields of other instances"
Ce que je traduirais par : "une instance peut lire et modifier les champs "protected" qu'elle hérite de sa superclasse. Cependant, elle ne peut pas le faire pour ceux des autres instances"
Je conclus de cette phrase que ceci ne devrait pas marcher :
Code:
1 2 3 4 5
| package pack1;
public class Base {
protected int i;
} |
Code:
1 2 3 4 5 6 7 8 9
| package pack2;
import pack1.Base;
public class SubClass extends Base {
void aMethod(SubClass sub){
sub.i = 1;
}
} |
Ici, dans la méthode aMethod, l'instance de Subclasse essaye de modifier le champ protected d'une autre instance (sub) que cette dernière hérite de Base.
D'après l'auteur ce n'est pas permis... Et pourtant.
Il se passe la même chose quand on essaye de modifier un champ privé d'une autre instance dans la classe qui déclare le champ privé, ce qui, toujours d'après le bouquin, n'est pas possible non plus.
Donc voilà, maintenant je suis dans le doute. Faute de l'auteur ? Incompréhension de ma part ?
J'ai toujours pensé avoir l'esprit clair sur ces notions de base de JAVA mais là je ne sais plus quoi penser.
Re: [Certification] private et protected, question
Salut,
Citation:
Envoyé par Satch
D'après l'auteur ce n'est pas permis... Et pourtant.
Je pense que l'auteur a voulut dire ceci que tu ne pouvais pas accéder à la variable protected d'une instance de la classe parente, dans ton cas la seconde méthode provoque une erreur :
Code:
1 2 3 4 5 6 7 8 9
| public class SubClass extends Base {
void aMethod(SubClass sub){
sub.i = 1;
}
void aMethod(Base base){
base.i = 1;
}
} |
Citation:
Envoyé par Satch
Il se passe la même chose quand on essaye de modifier un champ privé d'une autre instance dans la classe qui déclare le champ privé, ce qui, toujours d'après le bouquin, n'est pas possible non plus.
Je ne comprend pas ce que tu veux dire... Que le code suivant ne serait pas permis ?
Code:
1 2 3 4 5 6 7
| public class MaClasse {
private int x;
public void affect(Base other) {
other.x = x;
}
} |
Sinon ajoute un exemple ;)
a++