Java 程序中成员函数的可见性

发表于:2007-07-01来源:作者:点击数: 标签:
Java 成员函数的可见性定义 Java 对象对其进行访问的级别。以我的经验而言,可见性的选择是一个重要的设计决定,也是一个重要的执行决定,因为它是减少系统内耦合的一种方法。本周的主题改编自 The Object Primer 2nd Edition 的第 7 章和第 8 章。 从设计的
Java 成员函数的可见性定义 Java 对象对其进行访问的级别。以我的经验而言,可见性的选择是一个重要的设计决定,也是一个重要的执行决定,因为它是减少系统内耦合的一种方法。本周的主题改编自 The Object Primer 2nd Edition 的第 7 章和第 8 章。


从设计的角度看,注意到“统一建模语言 (UML)”提供三个可见性级别:公共受保护专用是非常重要的, 中对这三种可见性进行了说明。对于程序员,知道 Java 编程语言支持这三种可见性并添加了第四种:缺省是有好处的。 描述了 Java 编程语言支持的每种可见性,指出了相应的 UML 符号、当声明成员函数时将应用的 Java 关键字、每种可见性含义的描述以及我对有效应用每种可见性的建议。 描述了如何在 UML 中声明一个成员函数;注意:如何用“+”符号表明可见性。 演示了如何在 Java 代码中声明相同的成员函数;注意:在它的签名中使用关键字 public。
在设置方法的可见性时,我的宗旨是尽可能地进行限制。换句话说,如果方法并不一定要是公共的话,那么使它成为受保护的。如果它不必是受保护的,那么使它成为专用的。最后,仅当您要使用缺省可见性时才使用它,并且在应用它的原因不是很明了的情况下,在方法头文档中记录下应用该可见性的原因。您可能需要参考提示:。在该提示中,我们讨论了成员函数文档。
表 1. Java 成员函数的可见性
可见性UML 符号Java 关键字描述推荐用法
公共+public在任何其它对象或类中的任何其它成员函数都可以调用公共成员函数。当定义该成员函数的类层次结构之外的对象和类必须访问它时。
受保护#protected受保护的成员函数可以由定义它的类中或其任何子类中的任何成员函数调用。当成员函数提供在类层次结构内而非外部所需要的行为时。
专用-private专用成员函数只可以由与它在同一类中定义的其它成员函数调用,而在子类中的成员函数不能调用它。 当成员函数提供特定于某个类的行为时。专用成员函数通常是为了封装一个特定行为而再加工(也称为重组)类中其它成员函数的行为结果。
缺省无可用符号无关键字,简单地使其为空白成员函数对于同一包中的其它所有类实际上都是公共的,但是对该包外部的类是专用的。有时,它称为包可见性或友好的可见性。这是一个有趣的功能,但要小心使用。在构建实现诸如“客户”等具有凝聚力的商业概念的域组件、类集合时,我会用它将访问权限定在仅组件/软件包内的类。

清单 1. 在 UML 中声明成员函数的签名
+ hasParkingPrivileges(): boolean

清单 2. 在 Java 代码中声明简单的成员函数

public boolean hasParkingPrivileges()
{
return true;
}


参考资料

原文转自:http://www.ltesting.net