为什么在允许"返回x"时必须使用"this.x = x"?

use*_*273 3 java syntax

我对教程有一点误解.这是一个切口:

public class Test {
  private int id;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

现在,如果在get方法中有"return this.id",那么我会理解一切.但此刻我很困惑.我假设如果我将在set方法中返回id,我将返回参数,而不是类定义的id.总而言之,只要键入"id"就可以加入类定义的id,除非有一个带有相同名称的参数传递?这听起来很奇怪,我错过了什么?

Sou*_*ire 5

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

如果您有一个具有相同名称的参数或局部变量,则歧义使写入this必须.

这被称为" 阴影 ".据说局部变量正在遮蔽属性.

在编写时id,对Java最合理的猜测是你指的是最本地的引用,它是参数名而不是属性.要覆盖此行为,您必须澄清您愿意访问this.id,意味着属性,而不是本地变量.

希望把事情搞清楚!