一位学习C语言(那种C语言不太清楚)的同事问我,为什么类.属性可以解决的事情,为什么要get与set方法,当时我懵了。如下:
class Point{
public double x;
public double y;
}
调用:
Point p=new Point();
p.x=10;
p.y=20;
double x=p.x;
double y=p.y;
上述的方法没毛病啊,那我还用什么get,set。但是这完全不符合java的面向对象的特性,没有提供封装(encapsulation)功能。这也是java语言跟c语言(那种C语言不太清楚)的区别。
上面的类应改由私有域(私有的属性)和共有的访问方法(getter)的类来代替,对于可变的类,用包含私有域和共有设值方法(setter)的类代替。
class Point{
private double x;
private double y;
public Point(double x,double y){
this.x=x;
this.y=y;
}
public double getX(){return x;}
public double getY(return y;)
public void setX(double x){this.x=x;}
public void setY(double y){this.y=y;}
}
总之,公有类永远都不应该暴露可变的域。