14
回答
属性设为public可以直接点出来,那为什么还要有get set方法?

<无详细内容>

举报
黑香蕉
发帖于2年前 14回/1K+阅
共有14个答案 最后回答: 2年前

你首先要知道面向对象的一个特性就是封装,如果你都是public暴露给别人,那就没必要封装了。

类内设置private,通过get,set可以很好的隐藏内部的逻辑或者结构,只需要将需要的结果暴露给第三方即可。

就像你去饭店吃饭,点餐(set),上饭(get)。最后你只需要吃到你想吃的就好,至于怎么做那就是private的了,有些东西是不一定想让第三方知道的

1.这是一种设计方式的问题

2.万一你需要对这个属性做点什么在给别人或者别人给你的需要检查在设置到对象呢?

--- 共有 3 条评论 ---
MZHS回复 @Altman : 你想想有什么情况下用户有需求在bean中存储了对象,拿出来的时候需要做处理,设计要simple,easy.set,get,本身就是个存储取出不是为了给数据做处理,又不是加密,并没有要做处理的意思。要所见即所得,要是别人set了个女孩,get出个人妖,调用者要疯掉的 2年前 回复
Altman回复 @MZHS : 很简单.我对象内部用的和想通过get暴露给你的并不一样,你怎么在Set的时候给我处理好? 2年前 回复
MZHS说实话,第二点也没有什么卵用,get需要做点什么为什么不在set的时候不把做好,set里检验个悠悠球啊,健壮性检测只在展示层做判断,否则到处是健壮性判断,除了漏洞不好找,而且要人性化的话异常架构设计很费事 2年前 回复
private public 对函数的作用比较明显,对属性来说 感觉是一种规范吧,只能通过函数改变属性的值。

对外提供一个统一的接口

比如你开始写了一个public 的属性name,很多地方已经直接引用了,这时候说需要对name统一修改一下比如加一个后缀,这时候心里有肯定有1w头草泥马飘过,get方法这时候就显示出它的作用了

这个问题应该是你理解不够深入啊。

set或者get的时候,你可以不是简单的对那个属性进行操作,set的时候可以进行加工啊,也可以修改其他的属性,也可以加权限检查、完整性检查什么的,get的时候就像楼上的说的,你可以给一些其他的东西出来。

这些都是直接点所不具备的。

当然,还有一些其他的问题,比如方法可以覆盖

装逼罢了,并没有什么实际的卵用。但装逼装了这么些年了,你不跟着装,很多东西你用不了,比如spring

引用来自“ksfzhaohui”的评论

对外提供一个统一的接口

比如你开始写了一个public 的属性name,很多地方已经直接引用了,这时候说需要对name统一修改一下比如加一个后缀,这时候心里有肯定有1w头草泥马飘过,get方法这时候就显示出它的作用了

这时候Ctrl+f就该出现了,草泥马还是得走
顶部