Java中gitter、setter方法和public的区别
来源:互联网 发布:双11淘宝客服工作总结 编辑:程序博客网 时间:2024/06/05 20:22
关于
gitXXX
和setXXX
方法我相信大家肯定都用过,也有很多人会产生一个疑问,那就是为什么不直接把这个变量的访问权限改为public
的不是更加方便吗。一开始我一直有这个疑问,下面就来解释一下。
第一种说法:
一开始,我听到的最多的说法就是getXXX
和setXXX
可以提高类的封装性,直接用public
会破坏类的封装性等等,可是我实在是没有发现getXXX
和setXXX
怎么可以提高类的封装性,随着自己学的越来越多,就越怀疑这个说法,因为没法证明,所以绝对是个无稽之谈。
第二种说法:
“get()和set()方法起到对外界封闭的作用,举个例子:假如你的裤兜里有很多钱,你肯定不会让别人都来掏,肯定只有自己能拿到,或者你拿出来给他,set和get就相当与你的手 而你类里的变量就相当与你兜里的钱,对于外面的人来说不知道你类里有什么他就知道调用这个get会给他一个什么东西”
我最讨厌的就是这种偷换概念胡乱举例子的人,这让一些人大眼一看,感觉回答的很专业、很形象、很生动、很有说服力,真坑爹。
最靠谱的说法:
David John Wheeler有一句名言:
“All problems in computer science can be solved by another level of indirection.”getter、setter就是个很好的中间层。直接摘录stackoverflow上一个不错的总结:oop - Why use getters and setters?
1. 这两个方法可以方便增加额外功能(比如验证)。
2. 内部存储和外部表现不同。
3. 可以保持外部接口不变的情况下,修改内部存储方式和逻辑。
4. 任意管理变量的生命周期和内存存储方式。
5. 提供一个debug接口。
6. 能够和模拟对象、序列化乃至WPF库等融合。
7. 允许继承者改变语义。
8. 可以将getter、setter用于lambda表达式。(大概即作为一个函数,参与函数传递和运算)getter和setter可以有不同的访问级别。
有理有据,非常好。这才是真正的Java中gitter、setter方法和public的区别。
- Java中gitter、setter方法和public的区别
- java中getter 和 setter 方法有什么意义?为什么不用public代替GS?
- java中getter和setter方法的理解
- OC中retain和assign的setter方法的写法和区别
- Java中public、private和protected的区别
- Java中public,private,protected,和默认的区别
- Java中说明private,protected,public和default的区别
- JAVA中public private protected和默认的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- Java中private、protected、public和default的区别
- JAVA在定义一个方法的时候,不用public和用public有什么区别?
- JAVA中在类中声明方法的时,public void dog和直接void dog有什么区别?
- mysql 视图创建及使用
- HTTP基本原理(简介)
- 算法 - 数组
- ListView的适配(使用自定义ArrayAdapter)
- 空间商
- Java中gitter、setter方法和public的区别
- 淘宝技术博客
- leetcode:Merge Sorted Array 【Java】
- Toolbar Toggle
- env of ubuntu dev
- 如何实现ActiveMQ的Topic的持久订阅。
- Android Studio 快捷键使用技巧(一)
- 礼拜四log~CSS背景设置技巧和java框架某些问题的解决方法
- List(ArrayList与LinkedList)