Effective Java 类和接口 14.在公有类中使用访问方法而非公有域

一位学习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;}
}

总之,公有类永远都不应该暴露可变的域。

猜你喜欢

转载自blog.csdn.net/weixin_39923324/article/details/78037649