gpt4 book ai didi

class - OOP 术语 : class, 属性、特性、字段、数据成员

转载 作者:行者123 更新时间:2023-12-02 03:55:18 25 4
gpt4 key购买 nike

我正在开始学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com