嘿!好久不见
最近学习到了对象的权限修饰符,当我学习到private时有一丝疑惑。因为我只知道他有什么效果,却不知道他有什么用。经过冥思苦想终于有一些头绪,记录于此
私有属性的效果
当一个属性被private修饰时,意为着当前属性只能在当前类内访问。其他任何地方都将不能访问。在外部得到私有属性
私有属性只能在内部用,那么如果有需求,要在程序外部得到私有属性的值怎么办?既然可以在内部使用,那么就在内部写一个方法返回数据就好了,这样外面就得到了值,并且外面的改动也不会影响到类属性的值。
class Pig{
private int weight; //猪的体重
public int getWeight(){
return this.weight;
}
}
在外部修改私有属性
同上写一个方法,供用户在外部修改:class Pig{
private int weight; //猪的体重
public int getWeight(){
return this.weight;
}
public void setWeight(int newWeight){
this.weight = newWeight;
}
}
那么旧的问题解决了,新的问题就来了。
既然我定义private是为了保护属性,那现在通过方法又可以对属性进行访问、又可以对属性进行更改的,那么安全从哪里来呢?
安全从何而来?
我仔细研读了代码,发现:我的方法怎么才一行,做到了我想要的事。我可不可以在方法上多加一点,让我做的东西更全面呢?这仿佛让我一下子打开了灵感的大门,如果我在做更改做返回数据前,加一些判断,让不符合条件的东西就不能达到想要的效果。
这样岂不是达到了安全的目的了吗?
加判断,让安全产生
class Pig{
private int weight; //猪的体重
public int getWeight(){
return this.weight;
}
public void setWeight(int newWeight){
if(newWeight>0 && newWeight<1000){
this.weight = newWeight;
}else if(newWeight<=0){
//或者抛异常
System.out.println("对不起,没有这么轻的猪");
System.out.println("请检查程序");
}else{
//或者抛异常
System.out.println("对不起,没有这么重的猪");
System.out.println("请检查程序");
}
}
}
每一次控制都在我的条件掌控范围内。
如此一来,我的对象的属性就安全了,如果再有什么bug就继续多加if分支。
get方法也同此,可以加一些判断,这样,get成功不成功,也在我的掌握之内了。
回顾之前的东西,之前如果属性是public共有,那属性将完全暴露,而属性变成私有时,你就可以随意的添加一些条件,来让你的属性更加安全。public却不能添加任何条件
这样一来,private私有就体现出它的作用和优势来了。
这应该算是一种狭义意义上的封装的思想了
感谢阅读。
欢迎交流。