我在派生类中创建了基类的实例,并尝试访问受保护的成员.
我可以直接访问派生类中的受保护成员,而无需实例化基类.
基类:
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;
然后这会工作,因为你正在改变你自己的类的受保护成员(通过继承存在于该类中).但是,在您的情况下,您尝试在不同的包中更改其他类的受保护成员.因此,如果您被拒绝访问,那就不足为奇了.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。