面向对象编程学习感悟之私有属性的作用(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私有就体现出它的作用和优势来了。


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



至此,分享结束。

感谢阅读。

欢迎交流。


  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CODESYS支持面向对象编程(OOP),允许开发者使用类、对象、继承、多态等OOP概念进行程序开发。CODESYS中的OOP基于IEC 61131-3标准,并支持C++风格的面向对象编程语法。 CODESYS中的面向对象编程主要通过类(class)和对象(object)来实现。类是一种数据类型,它定义了对象属性和方法。对象是类的一个实例,它具有类中定义的属性和方法。CODESYS中的类和对象与其他编程语言中的类和对象类似。 在CODESYS中,可以使用类来定义函数块(FB)和数据块(DB)。定义一个类需要指定类名、属性和方法。类的属性可以是公共属性(public)、私有属性private)或受保护属性(protected)。公共属性可以被类的任何实例访问,私有属性只能被类内部访问,受保护属性可以被类及其子类访问。 定义一个类的方法需要指定方法名、参数和返回值。CODESYS中的方法可以是公共方法、私有方法或受保护方法。公共方法可以被类的任何实例调用,私有方法只能被类内部调用,受保护方法可以被类及其子类调用。 在使用类定义FB或DB时,可以使用继承(inheritance)来实现代码重用。继承是一种机制,允许子类(derived class)继承父类(base class)的属性和方法。子类可以重写父类的方法,实现多态性(polymorphism)。 在CODESYS中,可以使用关键字“new”和“delete”来动态创建和销毁对象。使用“new”关键字创建对象时,需要指定对象类型和构造函数的参数。使用“delete”关键字销毁对象时,会自动调用析构函数进行清理工作。 总之,CODESYS中的面向对象编程提供了丰富的OOP概念和语法,使得开发者可以更加高效地进行程序开发和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值