Advantage of set and get methods vs public variable
Possible Duplicate:
Why use getters and setters?
使方法访问类中的私有变量而不是使变量公开有什么好处吗?
例如,第二种情况比第一种情况好吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //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
Because 2 weeks (months, years) from now when you realize that your
setter needs to do more than just set the value, you'll also realize
that the property has been used directly in 238 other classes :-)
还有很多优点:
之前:
1 2 3 4 | private boolean alive = true; public boolean isAlive() { return alive; } public void setAlive(boolean alive) { this.alive = alive; } |
后:
1 2 3 4 5 | 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; } |
编辑:当您使用Eclipse时,还有一个新的改进——您可以在字段上创建观察点,但是如果您有setter,您只需要一个断点,并且……断点(例如在setter方法中)可以是有条件的,观察点(在字段上)不能。因此,如果您只想在
使用公共变量可能会导致为变量设置错误的值,因为无法检查输入值。
如:
1 2 3 4 5 | public class A{ public int x; // Value can be directly assigned to x without checking. } |
使用setter可以用于通过检查输入来设置变量。保持实例变量是私有的,getter和setter是一种封装形式。GETER和SETER也与JavaBean标准兼容,
吸气剂和二传手也帮助实现多态性概念
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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; } |
多态示例:我们可以将子类型的对象引用变量作为参数从调用方法分配给被调用方法的超类参数的对象引用变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
有点倒退的看待事物的方式。
在任何情况下,通过公开一个成员变量来公开你的类的内部工作是更好的吗?这样,它的任何消费者都可以做一些设计师从未想到过的事情,导致一场失败的盛宴和大量的崩溃?
答案本身就是这样的,真的吗?
OO的基本原理,封装。公共成员变量基本上是带有前缀的全局变量…