包所拥有的类能否拥有package visibility?
此前我认为包中的类可以拥有package visibility,这一认知来自Booch、Rumbaugh和Jacobson所著《The UML User's Guide, 2nd ed.》中的引用:
package visibility表示类对同一包中声明的其他类可见,但对其他包中声明的类不可见。
该特性在许多编程语言中都存在。我原本的理解对应如下包图:
UML 2.5.1规范对package visibility的定义更为精确,但最后一句话似乎禁止直接由包拥有的打包元素使用该可见性:
7.8.24.3:拥有package visibility的NamedElement对最近的封闭包内的所有元素可见(前提是其他拥有元素具备适当可见性)。在最近的封闭包外,标记为package visibility的NamedElement不可见。仅非包所拥有的NamedElement可标记为package visibility。
我从这句话理解到,包中的类无法标记为package visibility(因为类由包拥有),而类的属性和操作则可以(因为它们由类而非包拥有)。
这一点似乎在12.2.4节中得到了确认:
12.2.4:packagedElement的可见性可通过在名称前添加可见性符号表示(‘+’代表public,‘-’代表private)。包不可拥有protected或package visibility。
但我仍有疑问:
- 这一限制十分出乎意料;
- 上述语句仅说明包本身禁止使用package visibility,对其他元素的规定存在歧义(既未明确允许,也未明确禁止)。
因此,我的问题是:包所拥有的类能否拥有package visibility?若被禁止,是否存在合理的理由支撑这一限制?
内容的提问来源于stack exchange,提问作者Christophe

