首页 > java类封装的问题

java类封装的问题

在java中,类的属性是否必需把权限写成private?然后提供get,set来对属性进行访问?

个人觉得,对于一些特别的属性,例如人的年龄,防止程序员把它设成负数,所以需要设置set函数,在函数中对设置内容进行过滤。

但老师要求所有属性都设置成private,说这样才能体现封装的思想。但在大量的python程序中,对象的设计就没有必须设置成私有属性的习惯。

所以这种方式是java的规范,还是所有面向对象设什都应该这么做?这样做有什么特别的好处吗?


封装是面向对象三大特性之一,严格的说所有属性就应该private,每门语言对于面向对象支持的方式与程度可能存在差异,Java的规范严格,对于面向对象的支持非常好。

在保护数据的同时,通过setter和getter方法还能更精细的控制访问权限,如:对于某个属性只提供getter,那么这个属性就是只读属性,只允许在构造方法中初始化或者内部修改。

好好理解下封装的概念与作用。


把访问限定写成private是为了不让使用你代码的程序员错误的使用的你的类,访问修改不该访问的东西导致不符合预期的结果出现。而你只用负责你的类的接口(public)能提供正确的行为就行了。
python没有private限制是因为有一句话叫做“大家都是成年人,知道啥该动啥不该动”,可以参考:What is "Pythonic"


这种写法是属于封装思想的体现. 就像你提到的那样, 你可以在setter方法中对参数的赋值进行一定的限制条件, 这样只有符合要求的那些参数才能被成功赋值给成员变量, 不符合要求的数值你甚至可以使用异常来处理. 另外, 也像 @Fini 提到的那样, 对于某个属性只提供getter,那么这个属性就是只读属性,只允许在构造方法中初始化或者内部修改。

以上是这种封装写法的好处. 但我想说的是, 是否一定要遵循这种写法, 要依据具体情况而定, 因为这种写法与直接将属性定义为public/protected相比, 会造成更多的内存资源消耗, 而如果我们是在写Android代码, 由于手机性能有限, 我们为了提高程序的性能, 有些时候是需要舍弃这种封装的写法的, 只是我们在为这些属性赋值时, 要更多地去关注一下数值的合理性了.

【热门文章】
【热门文章】