私は取得せずに私の変数を呼び出すと、私が手...
とそれを呼び出す場合は、クラス内の属性へのアクセスについて話している場合は一般的に、がある違いは何ですかほぼあなたはまだ同じ属性にアクセスしているので違いはありません。
しかし、私は後でその点に戻って微妙な違いがあります。
ここで、クラスの外部から属性にアクセスしている場合。 private
アクセス修飾子でマークされている場合、その属性にアクセスすることはできません。
例:
class Hero{
private int health; //inaccessible from anywhere outside the class
public int getHealth(){
return health; //allows access of health outside the class
}
}
health
はpublicとして宣言された場合、今想像し、あなただけの直接あなたは、このような何か他のものにhealth
のデータ型を変更する必要があることを認識myHero.health
と1日を使用してアクセス健康を表現するクラスとして:
class Health{
private int minHealth;
private int maxHealth;
private int healthValue;
}
しかし、あなたはまだ頻繁にあなたがアーカンソーことmyHero.health
でコーディングされていますあなたのコードを今変更するのに困っています。
myHero.getHealth()
でコーディングしたとします。すべてのコードでゲッター(getHealth()
)を引き続き使用して健康価値を得ることができるため、今は違いがあります。あなたがやらなければならないことは、健康上の値を返すためにgetHealth()
の実装を変更することです:health
の
class Hero{
private Health health; //Data type changed, no worries..
public int getHealth(){
return health.getHealthValue(); //Implementation can be changed here..
}
}
データ型は、(直接それに依存している他のモジュールの面で)あまり心配することなく変更することができます。 private
なので、依存関係はなく、副作用が多すぎることなく変更できます。
ここで、クラスそのものの属性へのアクセスについて説明します。個人的には、属性に直接アクセスするのではなく、ゲッターを呼び出すことはまだ安全だと思います。
次の例を使用する:
class Circle{
private double radius;
private double area;
public double getArea(){
return Math.PI * radius * radius;
}
}
これは良いデザインではなく、説明のために、私はそれをこのように書かれています。
したがって、Circle
クラスでは、this.area
とthis.getArea()
が同じことをするようです。しかし、特定の機会にゲッターそのものが、単にあなたに裸の変数を渡すだけではなく、仕事をしているかもしれません。 this.area
を書くと、半径に基づく領域の代わりに0.0を与える傾向があります。
もう一度、最良の例ではありませんが、あなたは私の得点を得ます。新しいクラスMyClassAについては
'this.variable'は現在のオブジェクトのフィールドを参照します。 'this.getVariable()'は関数呼び出しです。 – mallaudin
@bradimus私はこれが重複しているとは思わない。参照される質問は、_外界のゲッタとセッタについて質問します。この質問は代わりに、同じクラスのゲッターを使用するかどうかを尋ねます。 – Seelenvirtuose
質問は重複しています。言及された質問に「外の世界」にのみ適用されるべきであるという言及はない。両方の状況に同じルールが適用されます。 –