我正在开始学习 OOP,我想了解什么构成了类。我对一些核心元素的使用有多么松散感到有点困惑,从而增加了我的困惑。
我已经看过 C++ 类、java 类,我想了解足够的知识来编写自己的伪类来帮助我理解。
例如this article我读到了这个(..类属性(或类属性、字段或数据成员)
我已经看到相当好的删减问题,表明类属性和类字段之间存在差异,例如 What is the difference between a Field and a Property in C#?
根据我正在学习的语言,定义是
- 属性(property)
- 字段
- 类变量
- 属性
不同语言之间存在差异?
最佳答案
“字段”、“类变量”和“属性”或多或少是相同的 - 附加到对象的低级存储槽。每种语言的文档可能一致地使用不同的术语,但大多数实际程序员可以互换使用它们。 (但是,这也意味着某些术语可能不明确,例如“类变量” - 在语言中可以解释为“给定类的实例的变量”或“类对象本身的变量”其中类对象是您可以直接操作的对象。)
在我使用的大多数语言中,“属性”完全是另一回事 - 它们是一种将自定义行为附加到读/写字段的方法。 (或者替换它。)
因此,在 Java 中,典型的示例是:
class Circle {
// The radius field
private double radius;
public Circle(double radius) {
this.radius = radius;
}
// The radius property
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
// We're doing something else besides setting the field value in the
// property setter
System.out.println("Setting radius to " + radius);
this.radius = radius;
}
// The circumference property, which is read-only
public double getCircumference() {
// We're not even reading a field here.
return 2 * Math.PI * radius;
}
}
(请注意,在 Java 中,属性 foo
是一对名为 getFoo()
和 setFoo()
的访问器方法 - 或者只是如果属性是只读的,则为 getter。)
看待这个问题的另一种方式是“属性”是一个抽象 - 对象的 promise ,允许调用者获取或设置一段数据。而“字段”等是此抽象的一种可能实现。上例中的 getRadius()
或 getCircumference()
的值可以直接存储,也可以计算,这对调用者来说并不重要; setter 可能有也可能没有副作用;这对调用者来说并不重要。
关于class - OOP 术语 : class, 属性、特性、字段、数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751269/