我了解受保护的访问意味着可以访问包和任何子类中的成员,而不管包如何。我发现难以理解的是,在子类中,当我创建具有受保护成员的类的对象时,会出现“不可见”错误?下面的代码证明了这一点(这是基于吴一凡回答的扩展版本)。请注意,我在包内外都有相同的代码行。因此我有两个问题:
- 为什么使用对象会改变一切?
这种对象访问差异不会发生在包内,即参见 A1 类中的 test()。
package a; public class A{ protected int a; } class A1{ public void test(){ A ref = new A(); ref.a=8; // no issue } } package b; public class B extends A{ } package c; public class C extends B{ public void accessField(){ a = 2; //That works. A ref = new A(); ref.a=8; // not visible!! }
}
非常感谢任何帮助...
谢谢,肖恩。