面向对象编程学习感悟之私有属性的作用(private)

嘿!好久不见

最近学习到了对象的权限修饰符,当我学习到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私有就体现出它的作用和优势来了。


这应该算是一种狭义意义上的封装的思想了



至此,分享结束。

感谢阅读。

欢迎交流。


你可能感兴趣的:(学习感悟)