可能重复:
为什么要使用getter和setter方法?
它有什么优势,以制作方式来访问你的类私有变量,而不是使变量公众?
例如是第二种情况比第一批好?
//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书面)为什么要使用getter和setter
由于2周(月,年)从现在开始,当你意识到你的制定者需要的不仅仅是设置的值做多,你也意识到,财产已经在其他238类直接使用:-)
还有更多的优点:
- getter和setter方法可以在其中有验证 ,字段不能
- 使用getter就可以得到想要的类的子类 。
- getter和setter方法是多态的 ,字段不
- 调试也简单得多,因为断点可以放在一个方法里面不近,鉴于场的许多引用。
- 他们可以隐藏实现的变化 :
之前:
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; }
编辑 :一个额外的新advange当你使用的是Eclipse -您可以创建在现场观察点,但如果你有二传手你只需要一个断点,并且断点...(例如setter方法)可以是有条件的,观察点(现场)不能 。 所以,如果你想阻止你的调试器只有当x=10
,你只能与内部二传手断点做到这一点。
使用公共变量可能会导致作为输入值不能检查错误的值设置为变量。
例如:
public class A{
public int x; // Value can be directly assigned to x without checking.
}
使用设定器可以用来设置变量与检查输入 。 保持实例varibale私人和getter和setter公众封装 getter和setter的形式也与Java组件标准兼容,
getter和setter还有助于实现多态的概念
例如:
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;
}
多态性例如: 我们可以从调用方法所调用的方法的超级类参数的对象Refernce变量分配Sub型作为参数的对象Refernce变量。
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");
}
}
}
有点倒退的方式看待事物。
有没有在那里,最好通过制定一个成员变量公开暴露你的类的内部运作任何情况下,所以它的任何消费者可以做的事情从来没有concieved的设计师,导致失败的盛宴和崩溃的聚宝盆?
排序答案本身确实是一个简化版,它?
OO的基石的原则,封装。 公共成员变量基本上是一个前缀全局变量...