3

チュートリアルについて少し誤解があります。ここにそのカットがあります:

public class Test {
  private int id;

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

とにかく私が理解できないのは、idの参照方法です。たとえば、getId メソッドでは、return 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 に答える