java static import protected fields visibility

时间:2018-05-09 08:39:15

标签: java

A包中有两个BAa,在包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

2 个答案:

答案 0 :(得分:0)

简短回答:否

这里有很好的解释:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

enter image description here

特别是你会对这张表感兴趣。您可以看到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