当前位置: 技术问答>java相关
请教大家,有关protected隐藏的一个小问题!
来源: 互联网 发布时间:2015-10-18
本文导语: class Superclass { protected String x = "Super variable";//或着去掉protected } class Subclass extends Superclass { public String x = "Sub variable"; } class Childclass extends Superclass { public String x = "Child variable"; } public class test { public s...
class Superclass
{ protected String x = "Super variable";//或着去掉protected
}
class Subclass extends Superclass
{
public String x = "Sub variable";
}
class Childclass extends Superclass
{
public String x = "Child variable";
}
public class test
{
public static void main(String args[])
{
Subclass sc = new Subclass();
Superclass sp = new Superclass();
sp=sc;
Superclass ssp = new Superclass();
Childclass ch = new Childclass();
System.out.println(sc.x);
System.out.println(sp.x);//这里的值应该随protected的值而改变。
System.out.println(ssp.x);
System.out.println(ch.x);
}
}
可不明白为什么sp.x的值始终是"Super variable“;难道数据隐藏不是这个道理?
{ protected String x = "Super variable";//或着去掉protected
}
class Subclass extends Superclass
{
public String x = "Sub variable";
}
class Childclass extends Superclass
{
public String x = "Child variable";
}
public class test
{
public static void main(String args[])
{
Subclass sc = new Subclass();
Superclass sp = new Superclass();
sp=sc;
Superclass ssp = new Superclass();
Childclass ch = new Childclass();
System.out.println(sc.x);
System.out.println(sp.x);//这里的值应该随protected的值而改变。
System.out.println(ssp.x);
System.out.println(ch.x);
}
}
可不明白为什么sp.x的值始终是"Super variable“;难道数据隐藏不是这个道理?
|
对protected的正确理解是:protected成员可以被其所在类的所有子类所访问(在子类中),但它对于包外代码的任意访问仍然是受保护的。
上面这个例子不是用来说明protected的效果的。而是用来说明下面这个问题的:
是句柄变量的类型——而不是他指向的对象的类型——决定了他可以访问哪些成员。
例如上面的例子中,sp虽然指向了sc,但他所访问的并不是对象sc的类Subclass中的x,而是句柄sp本身类型Superclass中的x。
上面这个例子不是用来说明protected的效果的。而是用来说明下面这个问题的:
是句柄变量的类型——而不是他指向的对象的类型——决定了他可以访问哪些成员。
例如上面的例子中,sp虽然指向了sc,但他所访问的并不是对象sc的类Subclass中的x,而是句柄sp本身类型Superclass中的x。