在父包中使包保护的java类可见

我有两个包

uk.co.planetbeyond.data 

 uk.co.planetbeyond.data.bean 

如何使uk.co.planetbeyond.data.bean中的类可见父类包uk.co.planetbeyond.data类,但在其他包中不可见?

这甚至有可能吗?

据我所知,这是不可能的。 虽然我们倾向于将包看成是一个层次结构,但是并不像Java语言那样重要。

正如所有其他答案中所述:不是。包层次意味着没有任何人设置它。

在我看来,这是Java的主要缺陷。 当通过合并其他怪物程序来构build怪物系统时,没有什么比Java语言更胜一筹。 所有其他语言最终都会以混乱,无法辨认,难以辨认的代码堆砌而成。

那么,Java也是如此,但它比我用过的其他语言要好得多。 但是对包层次的无知 – 无法将数据封装在包层次结构中 – 是阻止它的限制或砖墙。 我可以把一个系统或者一组一起工作的类放在一个包里。 然后我可以把这些类封装成私有的,这样,当这个包被添加到超级系统看不到的另一个超级系统并被这些隐藏的类所迷惑时。

但是,如果我的系统已经超级(超“超人”,而不是“超级”)需要几个包清晰,我以前的包私人class现在必须公开,我不能阻止超级class,超级系统看到我的超级系统中的一切。

为了使一个庞大复杂的系统工作,每一点的复杂性都要尽量减less。 我的超级系统必须尽可能简单地join到我所添加的超级超级系统中。 所有的pipe道,电线,梁和焊接都在公开展示中,因为我不能使它们成为包装级别的私人物品,这并没有帮助。

我希望在其他地方提到的拼图会有所帮助。 我也希望像IDE这样的开发者工具能够开始以大纲格式显示软件包,而不是把ab和abcde看作是同一个层次 – 只是同一个列表中的元素。

简而言之,除非你的uk.co.planetbeyond.data.bean包中的类的子类是不可能的。

您可能有兴趣阅读:

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

是不是“包私人”成员访问与默认(无修饰)访问的代名词?

在Java中,默认,公共,受保护和私有之间的区别

Java – 包私有类中的方法可访问性?

目前,这是不可能的。 Java包在本质上并不是真正的等级 – 类可以在同一个包中,也可以不在同一个包中。

然而,这可能是Jigsaw项目可能解决的问题之一,它可能包含在Java 8中。这应该允许创build在模块的所有包中公用的类,但不会导出到其他模块。

不,这是不可能的。 软件包可见性无法select性扩展到其他软件包。 一个类只能是私有的(即只对非私有的封闭类可见),package-private(没有修饰符,只对同一个包中的其他类可见)或public(对所有类都可见)。

据我所知在Java中是不可能的。 有关更多信息,请参阅此处的链接,其中清楚地说明了Java中的访问修饰符。