在Java中,有没有关于何时使用每个访问修饰符,即默认明确的规则(包私有)public,protected并且private,同时使class与interface和处理继承?
我在派生类中创建了基类的实例,并尝试访问受保护的成员.
我可以直接访问派生类中的受保护成员,而无需实例化基类.
基类:
package com.core;
public class MyCollection {
protected Integer intg;
}
Run Code Online (Sandbox Code Playgroud)
同一包中的派生类 -
package com.core;
public class MyCollection3 extends MyCollection {
public void test(){
MyCollection mc = new MyCollection();
mc.intg=1; // Works
}
}Run Code Online (Sandbox Code Playgroud)
不同包中的派生类 -
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
}
}
Run Code Online (Sandbox Code Playgroud)
当派生类也在同一个包中但是当派生类在不同的包中时,如何使用基类实例访问派生类中基类的受保护成员?
如果我将受保护的成员标记为"静态",那么我可以使用驻留在不同包中的派生类中的基类实例来访问基类的受保护成员.