确定。我有这两个类:
class A{
private static A myA = new A();
protected void a()
{
//some stuff
}
protected void test(){
myA.a(); //Hello I see you
}
}
class B extends A{
private static A myA = new A();
public void test()
{
myA.a(); //Eclipse error: Oopse a() is not visible.
}
}
我已经定义了A类和一个B类。 在内部我们都知道,我可以创建一个实例,并可以访问包括受保护方法a()在内的所有内容。
B是A的子类,因此可以访问受保护的成员。 但是如果我在B中创建A的实例,然后尝试从该实例访问方法a(),则eclipse会抱怨受保护的方法不可见。
为什么?是否A类和B类被视为受保护成员的相同类型?
现在,如果我将班级b改为:
class B extends A{
private static B myA = new B();/*I kept the name as myA to show the point*/
public void test()
{
myA.a(); //Hello, I see you now
}
}
我在内部B中将myA的类型更改为B.现在B可以从myA实例访问受保护的方法a()。虽然我希望B能够访问A实例的所有受保护方法,但不要将其视为违反封装。