面向对象编程中的对象特性与递归算法解析
1. 自定义类对象的相等性
在编程中,对象的相等性判断是一个重要的概念。对于类库中自带的类,其对象的相等性判断有默认的规则。但对于自定义类,情况则有所不同。
以 Person
类为例,创建两个初始化的 Person
对象并进行相等性测试:
| p1 p2 |
p1 := Person new.
p2 := Person new.
p1 = p2
"Print it: false"
这里虽然两个变量指向的 Person
对象在所有实例变量上可能相同,但由于没有为 Person
类定义“=”方法,测试使用的是从 Object
类继承的方法,该方法测试的是对象的标识。
程序员可以任意定义自定义类的两个对象何时应被视为相等。如果要定义自定义类实例的相等性,还需要定义 hash
方法。每个对象都能理解 hash
消息, Object
类中包含这样的方法,它实现了一个哈希函数,将对象映射到一个整数子集。哈希函数必须满足相等的对象( =
)被映射到相同整数的要求。
例如,若要基于姓氏的相等性来判断 Person
类实例的相等性,需要定义以下实例方法: