java 私有属性加get/set方法跟直接把属性设置成public有区别吗?
2017-10-24 10:10
1546 查看
如果仅仅是图中的例子,那么你说的这两种方式是没什么区别的。外部调用的结果都可以对属性进行读取与修改。
但是这个例子只是展示了一个常规的私有属性与 get/set 方法的使用模式,仅仅从这个例子中看不出来这个模式有什么好处。实际上,公共属性与私有属性的使用,还是有很大区别的:
如果一个属性是 public,那么外部可以直接对这个属性进行读取与修改;
如果一个属性是 private,那么外部不可以直接对这个属性进行读取与修改,而是通过这个类提供的 get、set 方法去访问。
也就是说,前者把控制权交给别人,而后者的控制权还在自己手中。我举几个简单的例子:
比如说一个只读属性,可以提供 get 方法给外界调用读取,但是不允许修改,那么这时候可以不提供 set 方法,或者在 set 方法中抛出异常;
比如我的数据格式与别人使用的格式不同,那么我可以在 get 与 set 方法中,加上进行格式转换的代码;
比如我的数据可以被读取与修改,但是修改时候必须经过我的验证,那么我的 set 方法中会添加数据验证的代码。
也就是说,get、set 方法的主要作用是控制外界对私有属性的访问。这一点,将属性声明为 public 是做不到的。
再举个大白话的例子。比如我有一本书,如果这本书声明为 public,那么书的控制权在外人手里,外人可以直接把书拿走去读,还可以在书上乱写乱画。但是如果声明为 private,书的控制权在我自己手里,别人想要看书,必须先经过我的允许(get 方法控制),而且绝对不能在书上乱写乱花(set 方法控制)。
private 目的是私有, 是不让别人用, get/set方法目的是让别人用. 这岂不矛盾了?
你说的是这个问题吧.
是这样的.private 是不让别人用, public 是让别人用, 但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置, 如下:
public set(某某某){
if(你是一些人){
你可以设置
}else{
对不起, 你没有设置的权限.
}
}
可以说: get/set+private 的功能完全包含了private/public 的功能. 所以这也成了一种编程的习惯.
相关文章推荐
- java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别
- Java中属性私有,使用get/set方法的目的
- java类中为什么设置set和get方法操作属性
- PHP中的__get()和__set()方法获取设置私有属性
- 【Unity&人物属性】人物属性大量设置用set,get方法还是public成员
- PHP中的__get()和__set()方法获取设置私有属性
- JAVA-Spring-Aop拦截ACTION中的方法,但是运行时AOP会拦截我Action中所有的私有属性的一些get,set方法。
- __set($key,$values) 和__get($varName) 魔术方法设置读取私有属性
- java中不利用get方法获得私有属性、不利用set方法修改私有属性、通过执行私有方法getName获得私有属性、通过执行私有方法setName更改私有属性name的值
- 【封装】java中为什么要将属性进行私有化,又使用set和get方法来设置和获取属性呢?
- Java反射实体类属性(get ,set方法)
- java 对类中的属性使用set/get方法的作用
- 利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)
- java类中为什么设置set和get方法
- java 中对类中的属性使用set/get方法的意义和用法
- Java反射:根据属性名得到其Set方法设置它的值
- java 反射直接获取get/set方法的写法
- java 反射调用Java类的私有set和get方法
- java中的get与set和add方法在概念上的区别
- Android命令行/c语言/java设置获取系统属性(getprop/setprop)的方法