我在派生类中创建了基类的实例并尝试访问受保护的成员。
我可以直接访问派生类中的受保护成员,而无需实例化基类。
基类:
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;
那么这会起作用,因为您正在更改受保护的成员your own类(通过继承存在于该类中)。但是,在您的情况下,您正在尝试更改受保护的成员不同的不同包中的类。因此,您被拒绝访问也就不足为奇了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)