算法(4th ed)(73):基础——数据抽象 4.1.6

阅读数:11 2019 年 11 月 2 日 11:55

算法(4th ed)(73):基础——数据抽象 4.1.6

(使用抽象数据类型:调用实例方法)

实例方法的意义在于操作数据类型中的值,因此 Java 语言提供了一种特别的机制来触发实例方法,它突出了实例方法和对象之间的联系。具体来说,我们调用一个实例方法的方式是先写出对象的变量名,紧接着是一个句点,然后是实例方法的名称,之后是 0 个或多个在括号中并由逗号分隔的参数。实例方法可能会改变数据类型中的值,也可能只是访问数据类型中的值。实例方法拥有我们在 1.1.6.3 节讨论过的静态方法的所有性质——参数按值传递,方法名可以被重载,方法可以有返回值,它们也许还会产生一些副作用。但它们还有一个特别的性质:方法的每次触发都是和一个对象相关的。例如,以下代码调用了实例方法increment() 来操作 Counter 对象heads(在这里该操作会将计数器的值加 1):

复制代码
heads.increment();

而以下代码会调用实例方法 tally() 两次,第一次操作的是 Counter 对象 heads,第二次是 Counter 对象 tails(这里该操作会返回计数器的 int 值):

复制代码
heads.tally() - tails.tally();

以上示例的调用过程见图 1.2.3。

算法(4th ed)(73):基础——数据抽象 4.1.6

图 1.2.3 触发实例方法的各种方式

正如这些例子所示,在用例中实例方法和静态方法的调用方式完全相同——可以通过语句(void 方法)也可以通过表达式(有返回值的方法)。静态方法的主要作用是实现函数;非静态(实例)方法的主要作用是实现数据类型的操作。两者都可能出现在用例代码中,但很容易就可以区分它们,因为静态方法调用的开头是类名(按习惯为大写),而非静态方法调用的开头总是对象名(按习惯为小写)。表 1.2.2 总结了这些不同之处。

表 1.2.2 实例方法与静态方法

实例方法 静态方法
举例 heads.increment() Math.sqrt(2.0)
调用方式 对象名 类名
参量 对象的引用和方法的参数 方法的参数
主要作用 访问或改变对象的值 计算返回值

评论

发布