这是同一问题的稍微详细的版本。
我们无法访问子类中的(超类的)受保护变量,子类在不同的包中。我们只能访问超类的继承变量。但是,如果我们将修饰符更改为“受保护的静态”,那么我们也可以访问超类的变量。为什么会这样。?
这是我试图解释的代码片段。
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.
}
}
上述行为是预期的。但我的问题是,如果我们将超类实例变量“a”的访问修饰符更改为“受保护的静态”,那么我们也可以访问该变量(超类的变量)......!我的意思是,
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);
}
}
上面的代码显示了输出:
超类 7 中的价值
test1 类中 x 的值为 10
这怎么可能...?