为啥我可以从另一个包访问非公共 javax.swing.Box.Filler?

Posted

技术标签:

【中文标题】为啥我可以从另一个包访问非公共 javax.swing.Box.Filler?【英文标题】:Why can I access the non-public javax.swing.Box.Filler from another package?为什么我可以从另一个包访问非公共 javax.swing.Box.Filler? 【发布时间】:2014-09-27 11:43:38 【问题描述】:

Java 教程中的This page 让我对问题 2d 感到非常困惑。查看Java 文档here,似乎静态嵌套类 javax.swing.Box.AccessibleBox 是受保护的,因此可以在子类或同一个包中访问它;而内部类 javax.swing.Box.Filler 有默认的访问修饰符——包保护,对吧? - 所以可以从同一个包中访问它。但是,只需在默认的 Eclipse 项目中创建一个简单的类:

package sandbox;
import javax.swing.Box;
public class ExternalClass 
    Box.Filler var1; // Fine?
    Box.AccessibleBox var2; // Compile error - not visible???

为什么我可以访问 Box.Filler;如果我可以访问它,那为什么我不能访问 Box.AccessibleBox,它受保护应该比 Box.Filler 更可见,它是受包保护的?

【问题讨论】:

【参考方案1】:

static,但不是protected。 Javadocs 省略了public 修饰符。如果您查看源代码,Filler 的完整类声明是:

public static class Filler extends JComponent implements Accessible

【讨论】:

以上是关于为啥我可以从另一个包访问非公共 javax.swing.Box.Filler?的主要内容,如果未能解决你的问题,请参考以下文章

无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员

如何通过 GetComponent 从另一个游戏对象中的另一个脚本访问变量?

声明类属性受保护还是公共?

如果我可以从我的私人 IP 地址访问本地文件,为啥我不能从我的公共 IP 地址访问本地文件?

从另一台计算机访问虚拟主机

为啥我们应该将接口方法声明为公共的? [复制]