关于如何访问变量的方法?

时间:2018-11-13 03:48:04

标签: java

我目前正在学习Java,教科书中的示例之一如下:

class Circle{
    private double radius;
    private double area;


    public void setRadius(double r){
        radius = r;
        setArea(Math.PI * radius * radius);
    }
    public void setArea(double a){
        area = a;
    }

看看setRadius方法,在编写上面的内容与在编写以下内容之间是否存在样式偏好/差异?

    public void setRadius(double r){
        radius = r;
        setArea(Math.PI*r*r);
    }

我的一位同学提出一个论点,即应该使用参数r而不是私有变量radius,因为除非使用,否则公共方法不应直接访问私有变量。吸气剂。这是更多的样式偏好还是对,因为公共方法直接访问私有方法是不好的吗?

2 个答案:

答案 0 :(得分:4)

该代码让人感觉很奇怪。通常,当您调用set方法或 setter 时,您将显式设置一个值,而没有其他设置。 setArea方法调用似乎不合时宜,因为这已成为所述方法调用的副作用,后者仅指定setRadius

恕我直言,应在请求后使用area计算类中的radius,而不是同时存储radiusarea。该程序应如下所示:

class Circle {
    private double radius;

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    public double getArea(){
        return Math.PI * radius * radius;
    }
}

如上所述,r vs radius问题完全消失了。

答案 1 :(得分:1)

在这种情况下,两个方法调用都是正确的

setArea(Math.PI * radius * radius);

setArea(Math.PI*r*r);
  

除非使用getter,否则公共方法不应直接访问私有变量

我不同意这一点。因为getter也是一种公共方法,所以这句话毫无意义。