getter、setter是个很好的中间层。
这两个方法可以方便增加额外功能(比如验证)。
内部存储和外部表现不同。
可以保持外部接口不变的情况下,修改内部存储方式和逻辑。
任意管理变量的生命周期和内存存储方式。
提供一个debug接口。
能够和模拟对象、序列化乃至WPF库等融合。
允许继承者改变语义。
可以将getter、setter用于lambda表达式。(大概即作为一个函数,参与函数传递和运算)
getter和setter可以有不同的访问级别。
封装数据,对私有属性进行封装,只是暴露出public方法来访问。
但是为什么要这么做,原因很简单,封装的作用就是保护,保护属性本身不被篡改。
比如有些属性只是可读但不可写,那么只提供它的getter方法就好,意思就是某些属性只能单一方向的被访问,
getter和setter就是提供这样的接口,对于public的属性,可以直接使用类名来访问,自身的“安全性”就降低了。
setter方法
1.可以限制和检验setter方法传入的参数
2.隐藏对象内部数据结构
3.保持对象在每个状态的完整性
getter方法
1.按照客户的期望返回格式化数据
2.控制服务的顺序(例如只有当连接建立时getter方法才返回相应实例)
参考:http://stackoverflow.com/questions/7207994/java-setter-and-getter
框架中写的大部分getter和setter方法都是直接返回和赋值,不过实际上可以在方法中加入访问权限控制、逻辑判断等,实现OO编程中封装和信息隐藏。
其实说得明白点吧,这只是java类(特别的很多时候是一个javabean)的两个方法,以提供对某个变量(字段)设置与访问的两个入口,在很多时候也正如你说,跟定义成public是没有两样的,具体的原因在于:
(1)由于很多框架都是调用这两个方法来实现沟通,这是一种习惯了。
(2)get/set方法也不一定只是简单的作一个赋值,或一个返回值吧,在这里可以作一些权限的控制,比如不是每个角色都可以赋值的。再比如返回的值不一定是值本身,可以是经过处理了的,比如加密,这用public定义是不能作到的。