Java类和包的设计

时间:2014-05-07 15:20:59

标签: java class oop design-patterns packages

我有一个上下文类 - > prototype.context - >哪些应用可以创建对象但不能扩展。但是,系统开发人员可以将类扩展为更多类型。系统类包是prototype.system和prototype.dbengine。这些类应该具有对上下文对象的完全访问权限,但其他类不应该。

如果我将上下文中的字段保留为包访问权限,则这些类无法访问它,因为它们来自不同的包。那么我应该如何命名这些包以便其他开发人员可以使用这些类,并且还可以完全访问系统类?

3 个答案:

答案 0 :(得分:1)

如果你绝对必须使用包私人访问和/或不能使用protected,那么你真正唯一没有使用public的选择就是将所有内容都放在同一个包中。

这是因为在Java中,“子包”并不存在 - 例如,java.util是一个与java.util.concurrent完全不同的包;因此,从访问范围的角度来看,java.util.concurrent是否被称为java.concurrentjava.util.concurrent没有区别。在任何一种情况下,java.util中的类都无法访问{{1}}中的包私有成员。命名仅为方便起见,并不表示任何实际的层次结构。

因此,无论您如何命名包,您都无法从其他包中访问包私有成员。

答案 1 :(得分:1)

您想要的实际上是C ++朋友级功能的模拟。这里描述了一个很好的技巧:https://stackoverflow.com/a/18634125/2886891

答案 2 :(得分:0)

让system和dbengine类在上下文中扩展必要的类,并设置system和dbengine类需要保护的字段/方法。