在A
包中有两个B
和A
,a
,在包B
中有b
,导入类{{1}进入B
,类A
必须不为包私有。很公平,那么导入类B
的静态成员呢?让我们用一个简单的例子来澄清:
B
从此处开始,只有package b;
public class B
{
protected static final int VALUE = 1;
}
扩展B.VALUE
时,我们才能将A
静态导入A
。
B
这里,关于类package a;
import b.B;
import static b.B.VALUE;
class A extends B
{
int getValue()
{
return VALUE;
}
}
class C
{
}
,它是否可以访问静态字段C
,即使它没有扩展类B.VALUE
?
答案 0 :(得分:0)
简短回答:否
这里有很好的解释:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
特别是你会对这张表感兴趣。您可以看到protected
修饰符生成字段对于扩展此类的相同包和类中的类是可见的。
答案 1 :(得分:0)
是否可以访问静态字段B.VALUE :否
protected
可以从以下位置访问:
但是C
none 。
| Class | Package | Subclass | Subclass | World | | |(same pkg)|(diff pkg)| ————————————+———————+—————————+——————————+——————————+———————— public | + | + | + | + | + ————————————+———————+—————————+——————————+——————————+———————— protected | + | + | + | + | - ————————————+———————+—————————+——————————+——————————+———————— no modifier | + | + | + | - | - ————————————+———————+—————————+——————————+——————————+———————— private | + | - | - | - | - + : accessible - : not accessible
可以找到详细信息:here from the Docs