我在派生类中创建了基类的实例,并尝试访问受保护的成员.
我可以直接访问派生类中的受保护成员,而无需实例化基类.
基类:
package com.core; public class MyCollection { protected Integer intg; }
同一包中的派生类 –
package com.core; public class MyCollection3 extends MyCollection { public void test(){ MyCollection mc = new MyCollection(); mc.intg=1; // Works } }
不同包中的派生类 –
package secondary; import com.core.MyCollection; public class MyCollection2 extends MyCollection{ public void test(){ MyCollection mc = new MyCollection(); mc.intg = 1; //!!! compile time error - change visibility of "intg" to protected } }
当派生类也在同一个包中但是当派生类在不同的包中时,如何使用基类实例访问派生类中基类的受保护成员?
如果我将受保护的成员标记为“静态”,那么我可以使用驻留在不同包中的派生类中的基类实例来访问基类的受保护成员.
解决方法
你不能这样做是对的.您无法访问该字段的原因是您与该类不在同一个包中,也不访问同一类的继承成员.
最后一点是关键点 – 如果你写的话
MyCollection2 mc = new MyCollection2(); mc.intg = 1;
然后这会工作,因为你正在改变你自己的类的受保护成员(通过继承存在于该类中).但是,在您的情况下,您尝试在不同的包中更改其他类的受保护成员.因此,如果您被拒绝访问,那就不足为奇了.