可能性のある複製:
ゲッターとセッターを使用する理由
変数をパブリックにする代わりに、クラス内のプライベート変数にアクセスするメソッドを作成することには利点がありますか?
たとえば、2番目のケースは最初のケースよりも優れていますか?
//Case 1
public class Shoe{
public int size;
}
//Case 2
public class Shoe{
private int size;
public int getSize(){
return size;
}
public void setSize(int sz){
size = sz;
}
}
ゲッターとセッターを使用する理由の答えとして(@ ChssPly76によって書かれた)SOで私がいつか見たもの
セッターが値を設定する以上のことを行う必要があることに気付いたときから2週間(月、年)、プロパティが他の238クラスで直接使用されていることにも気付くでしょう:-)
さらに多くの利点があります。
前:
private boolean alive = true;
public boolean isAlive() { return alive; }
public void setAlive(boolean alive) { this.alive = alive; }
後:
private int hp; // change!
public boolean isAlive() { return hp > 0; } // old signature
//method looks the same, no change in client code
public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }
[〜#〜] edit [〜#〜]:Eclipseを使用している場合、新たな利点が1つあります-フィールドにウォッチポイントを作成できますが、setterがある場合はブレークポイントだけが必要です。 。ブレークポイント(セッターメソッド内など)は条件付きにすることができ、ウォッチポイント(フィールド上)はできません。そのため、x=10
セッター内のブレークポイントでのみ実行できます。
パブリック変数を使用すると、入力値を確認できないとして変数に誤った値が設定される可能性があります。
例えば:
public class A{
public int x; // Value can be directly assigned to x without checking.
}
Setterを使用して入力のチェックで変数を設定できます。インスタンスの変数をプライベートに保ち、ゲッターとセッターをパブリックに保つことはEncapsulationの形式です。ゲッターとセッターはJava Beans標準と互換性があります。
ゲッターとセッターも役立ちますポリモーフィズムの概念の実装
例えば:
public class A{
private int x; //
public void setX(int x){
if (x>0){ // Checking of Value
this.x = x;
}
else{
System.out.println("Input invalid");
}
}
public int getX(){
return this.x;
}
ポリモーフィックの例:サブタイプのオブジェクト参照変数を、呼び出しメソッドからの引数として、呼び出されたメソッドのスーパークラスパラメーターのオブジェクト参照変数に割り当てることができます。
public class Animal{
public void setSound(Animal a) {
if (a instanceof Dog) { // Checking animal type
System.out.println("Bark");
}
else if (a instanceof Cat) { // Checking animal type
System.out.println("Meowww");
}
}
}
物事をやや後方に見る方法。
メンバー変数を公開することでクラスの内部動作を公開するほうがよい状況はありますか?そのため、その消費者はデザイナーが思いもよらないことをすることができ、失敗のeast宴とクラッシュの宝庫につながりますか?
答えの種類自体は本当にそうではないのですか?
オブジェクト指向の基本原則、カプセル化。パブリックメンバ変数は、基本的にプレフィックスを持つグローバル変数です...