3

たとえば、クラスがありますMan

が保護されている場合、( class のインスタンス) がオブジェクト( class の別のインスタンス)の保護/プライベート属性を変更できるMan.age理由がわかりません。彼はそれができないはずです(IMO)。chuckNorrisManagejackBauerMan

私の考えでは、保護/プライベート属性の値は、クラスではなく、オブジェクト自体にのみ属していると考えられています...

説明が必要だと思いますが、混乱しています。

4

3 に答える 3

2

マチューは正しい。cuckNorrisはjackBauer.ageを行うことができます

しかし、その上で問題はありません。Man 内部で Man インスタンス属性を参照している場合、それは Man クラスをコーディングしていることを意味するため、何をしているのかがわかります。

問題は、その Man クラスを渡すと、Man クラスがどのようにコーディングされているかを知らなくても Man 属性にアクセスできる場合です。

セッターとゲッターは、私が知らない、知る必要のないビジネス ロジックを実行している可能性があります。しかし、Mam をコーディングした人は知っています。

于 2012-01-22T10:56:57.647 に答える
1

次の Java クラスを検討してください。

public class Base {
  private int a
  protected int b;

  public Base(int a,int b) {
    this.a = a;
    this.b = b;
  }

  public int getA() {
     return a;
  }

  public int getB() {
    return b;
  } 
}

...
 Base foo = new Base(1,2);
 Base bar = new Base(3,4);

fooインスタンスが保護された変数またはプライベート変数を変更できる方法はありません(おそらくダーティリフレクションを介する場合を除く)bar

必要に応じて許可することもできますが、

public class Base {
  private int a
  protected int b;

  public Base(int a,int b) {
    this.a = a;
    this.b = b;
  }

  public int getA() {
     return a;
  }

  public int getB() {
    return b;
  } 
 public void changeB(int newB,Base other) {
   other.b = newB;
 }
}
... 
Base foo = new Base(1,2);
Base bar = new Base(3,4);
foo.changeB(5,bar);

changeBオブジェクト内のものを変更することからメソッドを保護することはできませんother[*]。プログラムの動作に注意する必要があります。一部の言語では、引数を unchangeable としてマークできますがother、Java ではそうではありません。大したことではありません。

[*} のすべてのフィールドをBasefinal としてマークすることで可能ですが、オブジェクトが構築された後にインスタンス自体でさえメンバーを変更することはできません。

于 2010-10-08T20:20:31.393 に答える
0

プライベート属性は、クラス内のメソッドによってのみアクセスできます。保護された属性は、子孫クラスでのみアクセスできます。したがって、オブジェクト jackbauer は、クラス Man のオブジェクトchuckNorris でプライベートまたは保護されているものを変更できません。これが役立つことを願っています

于 2010-10-07T18:18:13.153 に答える