Voici la version légèrement élaborée de la même question.
Nous ne pouvons pas accéder à une variable protégée (de la superclasse) dans la sous-classe, où la sous-classe est dans un paquet différent. Nous pouvons seulement accéder à la variable héritée de la superclasse. Mais si nous changeons le modificateur en ' protected static', nous pouvons aussi accéder à la variable de la superclasse. Pourquoi est-ce que c'est comme ça ?
Voici l'extrait de code de la même chose que j'essayais d'expliquer.
package firstOne;
public class First {
**protected** int a=7;
}
package secondOne;
import firstOne.*;
public class Second extends First {
protected int a=10; // Here i am overriding the protected instance variable
public static void main (String [] args){
Second SecondObj = new Second();
SecondObj.testit();
}
public void testit(){
System.out.println("value of A in Second class is " + a);
First b = new First();
System.out.println("value in the First class" + b.a ); // Here compiler throws an error.
}
}
Le comportement ci-dessus est attendu. Mais ma question est la suivante : si nous changeons le modificateur d'accès de la variable d'instance de la superclasse 'a' en 'protected static', nous pouvons accéder à la variable (celle de la superclasse) également ! Ce que je voulais dire, c'est que
package firstOne;
public class First {
**protected static** int a=7;
}
package secondOne;
import firstOne.*;
public class Second extends First {
protected int a=10;
public static void main (String [] args){
System.out.println("value in the super class" + First.a ); //Here the protected variable of the super class can be accessed..! My question is how and why..?
Second secondObj = new Second();
secondObj.testit();
}
public void testit(){
System.out.println("value of a in Second class is " + a);
}
}
Le code ci-dessus montre la sortie :
valeur dans la super classe 7
la valeur de x dans la classe test1 est 10
Comment cela est-il possible... ?