public class Addition
{
private int number1,number2;
public void setNumber1()
{
}
public int getNumber1()
{
}
public void setNumber2()
{
}
public int getNumber2()
{
}
}
如果我可以使用公共getter和setter方法访问变量,那么保持变量私有的重点是什么。
答案 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
}
这里我们有控制权,没有人可以设定价格的负值。这是封装“给予控制”的力量。