3

我对教程有一点误解。这是它的一个片段:

public class Test {
  private int id;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
}

无论如何,我无法理解的是如何引用 id。例如,我可以看到,在 getId 方法中,我可以通过返回 id 直接访问先前定义的 id。但是在 setId 方法中,之前定义的 id 被称为 this.id,方法参数是 id。

现在,如果 get 方法中有“return this.id”,那么我会理解一切。但此刻我很困惑。我假设如果我在 set 方法中返回 id,我会得到参数,而不是类定义的 id。所以总而言之,除非有同名的参数传递,否则只需键入“id”就可以访问类定义的id?这听起来有点奇怪,我错过了什么?

4

4 回答 4

6

在 Java 中,在正常情况下,this类的内部是可选的。可以使用或不使用 . 来引用任何属性this

当您有同名的参数或局部变量时,歧义使得编写this, 是强制性的。

这称为“阴影”。据说局部变量正在遮蔽属性。

当你写的时候id,对Java最合理的猜测是你的意思是最局部的引用,也就是参数名而不是属性。要覆盖此行为,您必须澄清您愿意访问this.id,即属性,而不是局部变量。

希望把事情弄清楚!

于 2013-01-21T01:16:39.043 回答
2
this.id = id;

问题是您还有一个同名的局部变量。因此,您不能直接访问类成员,因为id将引用局部变量。这就是为什么this需要在此处访问类成员变量的原因。

您可以通过更改名称重写如下,现在this不再需要。

public void setId(int locID) {
    id = locID;
}
于 2013-01-21T01:10:42.807 回答
1

您可以将 this.id 放在 getId 方法中,它仍然可以工作。它实际上是在说同样的事情。这将编译并且完全有效:

private int id;

public int getId() {
    return this.id;
}
public void setId(int id) {
    this.id = id;
}
于 2013-01-21T01:10:30.367 回答
-3

如果您从 Test 类创建了对象并且您尝试id 像这样访问它:

int test;
test=TestObject.id;

你会得到错误因为id是私人的所以你必须说

test=TestObject.getid();

现在getid()将为我们返回id我们可以调用它的私有方法,因为它的公共方法

于 2013-01-21T01:19:43.570 回答