【问题标题】:can property in oop be fields or is it just a combination of setters and getters methods?oop 中的属性可以是字段还是只是 setter 和 getter 方法的组合?
【发布时间】:2018-12-04 00:17:47
【问题描述】:

所以我一直在尝试理解属性的确切含义。我已经在 stackoverflow 和其他网站上搜索了之前询问的 Q/A,但我遇到的答案并没有具体说明使用 setter 和 getter 修改的字段(实例变量)是否也称为属性。

我遇到的定义是“修改对象字段的 setter 和 getter 方法的组合”

以下只是一小段代码,如果您需要更多说明,可以让您更好地理解我的问题。

//property?
String name;

//property?
public void setName(String n){
    name = n;
}
//property?
public String getName(){
    return name;
} 

【问题讨论】:

  • 我听说它们是 类成员类属性,如果它们是私有的,因此如果没有 getter 和 setter 就无法修改,当然是非静态的.也许Property是合法的描述……java中还有一个类java.util.Properties扩展HashTable<Object,Object>
  • @deHaar 不要混淆java.util.Properties,它是Java API 中的一个类,具有对象(或类,或其他实体)的属性,这是对象中一个重要的一般概念面向领域的分析、设计和开发,与特定语言无关。它们是完全不同的东西,彼此没有关系(除了java.util.Properties 有自己的属性:))。 java.util.Properties 是一个类,可帮助将各种命名值(如软件设置)存储到文件中并在之后读取它们。
  • @m.vokhm 我不想通过提及java.util.Properties 来混淆任何人。我发现值得一提的是,有一个名为 Properties 的类,以确保在谈论一般概念及其术语时没有人会对此感到困惑。
  • @deHaar 并且 BTW 属性也可能是静态的(类属性)。它们可以是静态的、动态的、私有的、公共的、受保护的、最终的以及任何可以想象的。
  • @m.vokhm 当然,但问题是关于 properties 只能通过 getter 和 setter 修改,这至少使它们成为私有的,不是吗?

标签: java oop variables properties field


【解决方案1】:

Properties 表示属于class 的任何成员。它可以是变量、其他/同一类的对象、该类的方法等。

基本上getter/setter 仅用于那些成员变量。

局部变量是它所属的方法的属性,而不是类的属性。

【讨论】:

  • 那么如果你在这个网站上搜索属性的定义,怎么会定义为“修改对象字段的setter和getter方法的组合”?
  • @aziz 阅读更多关于getter/ setter 此处:stackoverflow.com/questions/10407877/…
【解决方案2】:

在 OOP 世界中,“属性”的含义相当广泛,具体含义取决于上下文。一般是实体的一个属性; i 可能是一个人的姓名或年龄、花的颜色、建筑物的高度等。属性有其名称和值(例如flower.color = red -- 这里color 是名称,而@ 987654323@是值),该值可能属于不同的类型(或类):字符串、数字、人、企业……它可能有一个常量值(在所有者的生命周期内永远不会改变(它所属的实体))或者它可能具有可由用户更改的变量值。在软件领域,可以在领域分析和软件设计的概念层面进行讨论;在这种情况下,人们通常不关心它的具体实施方式。同样,它可以在具体实现(程序代码)级别使用,然后实现这个概念的手段取决于编程语言。

例如,在Java 中,当我们说“属性”时,我们通常指的是对象的一个​​字段(变量)和几个方法(或只读属性的单个方法)来访问其值(getter和二传手):

class Person {
  private String name;         // the field to hold the value
  public Person(String name) { // Constructor
    this.name = name // The name is given at the moment it's been born 
  }
  public String getName() { return Name; } // getter
  // No, name can't be changed after it's been born -- it's a read-only property, thus no setter
  // public void setName(String name) { this.name = name; } // otherwise the setter would look like this
}

在这种情况下,用户可以使用以下代码访问属性的值:

 System.out.println(thisPerson.getName());

其他语言(例如C#)可以以更方便的方式对属性进行编码:

class AnotherPersonType {
  private string name // a field to hold the value  
  public string Name 
  {
     get => name;         // getter, the same as "return this.name;" 
     set => name = value; // setter, the same as "this.name = value;"
  }    
}  
.....
anotherPerson.name = "John"; // It looks like an assignment, 
                              // but in fact, the setter is invoked   

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2011-08-25
    • 1970-01-01
    • 2019-01-22
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多