【发布时间】:2014-05-09 02:46:20
【问题描述】:
在 Pharo by Example Book 中,我读到了
Smalltalk 中的实例变量是实例本身私有的。 这与 Java 和 C++ 不同,后者允许实例变量 (也称为“字段”或“成员变量”)被任何人访问 恰好属于同一类的其他实例。
我认为 Java 或 c# 等其他语言也很常见。类的实例不能访问同一类的另一个实例的实例变量。 它是如何只针对 smalltalk 的?
在 Smalltalk 中,同一类的两个实例不能访问彼此的 实例变量,除非该类定义了“访问器方法”
一个实例如何使用访问器方法访问另一个实例的实例变量?
using namespace std;
#include<iostream>
class car {
private:
int mileage;
public:
car(int); // Constructor
int odometer();
};
car::car(int m) {
mileage = m;
}
int car::odometer() {
return mileage;
}
int main(void) {
car ford(10000);
car honda(20000);
cout<<ford.odometer();
cout<<honda.odometer();
}
在此示例中,福特和本田是同一类 Car 的两个实例。 福特如何使用本田对象的里程,反之亦然?这是我的实际问题。对不起,如果这太天真了
【问题讨论】:
-
我已经阅读了 Pharo By 示例书中的答案和更多内容。我开始了解到,在 C++ 和 java 中,一个实例可以根据其访问修饰符级别访问其他实例的实例变量,如果是私有的,那么它可以在类中访问,如果是公共的,那么它可以在任何地方访问。但是在 Smalltalk 中,我们不能在课堂上或任何地方做。 java提供的最大封装,C++只到类级别
标签: java encapsulation smalltalk instance-variables getter-setter