使用私有变量

时间:2014-03-11 05:52:33

标签: java

 public class Addition
    {
        private int number1,number2;

        public void setNumber1()
        {
        }
        public int getNumber1()
        {
        }
        public void setNumber2()
        {
        }
        public int getNumber2()
        {
        }
    }

如果我可以使用公共getter和setter方法访问变量,那么保持变量私有的重点是什么。

4 个答案:

答案 0 :(得分:0)

使用setter方法可以在为私有变量赋值之前实现逻辑。这可以防止其他代码将任意值分配给您的私有变量,这可能导致您的对象处于无效状态。例如:

没有setter方法

public class Man {
    public int height;
}

//...some code
man.height = -1; // BOOOM!

使用setter方法:

public class Man {
    private int height;
    public void setHeight(int h) {
        this.height = h >= 0 ? h : 0;
    }
}

//...
man.setHeight(-10);  // Will keep the man in valid state

答案 1 :(得分:0)

您可以在setter中添加验证。

private int age;

public void setAge(int a){
   if(a>0){
      this.age = a;
   }else{
      this.age = 0;
   }
}

答案 2 :(得分:0)

您可以假设将变量设为私有是编码的基本准则。如果你把它们公之于众,它就可以被外界所接受,任何人都可以修改它。

假设在您的情况下number1应始终为+ ve int。因此setter方法将检查并帮助您避免设置-ve值。见下文:

public void setNumber1(int number)
{
    if(number >= 0)
    {
        this.number1 = number
    }
    else
    {
         //you can throw exception here
    }
}

答案 3 :(得分:0)

它遵循一个重要的面向对象的属性 封装。 例如,我有一个带有公共修饰符的整数变量价格(任何人都可以访问它)

public int price;

现在我们知道价格不能消极,但它是公开的,所以我们对此没有任何控制权。现在看一下封装

private int price;
public void setPrice(int price)
{
 if(price>0)
  this.price=price
}

这里我们有控制权,没有人可以设定价格的负值。这是封装“给予控制”的力量。