面向对象三大特性之一是封装,类中的域(变量),尽量使用private,如果真要访问,可以提供get和set,以避免破坏封装性。

但是,如果get访问器中返回的是引用类型对象的话,那也有可能会被外界所修改,从而破坏封装性。如:

public class Employee {private Date hireDay;public Date getHireDay(){return this.hireDay;}private String name;public Employee(String name){this.name = name;}public boolean equals(Employee other){return name.equalsIgnoreCase(other.name);}
}
      Employee zhang3 = new Employee("zhang3");Date d = zhang3.getHireDay();d.setTime(d.getTime() - 10000000);

这一点,是我以前所没想到的。

转载于:https://www.cnblogs.com/leftfist/p/4257883.html

访问器中谨慎返回引用类型对象相关推荐

  1. vb 根据pid获取句柄_C++中避免返回指向对象内部的句柄(handles)

    点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 欢迎关注我,一起学习,一起进步! 1.问题的引入 假如你正在给一个应用写一个矩形类,这个 ...

  2. 面向对象——访问器、修改器、构造函数、对象的创建流程

    在之前的代码讲解中,我们将一类事物封装成一个类,再去创建一个相应的对象去调用方法完成相应的操作这是非常方便的,但是在之前的代码我们发现,对象不仅仅能调用类中的方法,还可以访问到该类中的成员变量并进行赋 ...

  3. 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )

    文章目录 I . 属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII . 延 ...

  4. AgileEAS.NET之ORM访问器

    上一篇文章AgileEAS.NET之数据关系映射ORM简单介绍了一下AgileEAS.NET平台中ORM对象的组织机构体系,但并没有对其所执行的数据存取操作介绍,在AgileEAS.NET中,我对OR ...

  5. JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态

    一.认识class定义类 我们会发现,按照前面的构造函数形式创建 类,不仅仅和编写普通的函数过于相似,而且代码并不容易理解. 在ES6(ECMAScript2015)新的标准中使用了class关键字来 ...

  6. 设计模式的理解: 访问器模式 Visitor

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...

  7. vue在axios响应拦截器中对状态码code进行相应处理

    在axios拦截器中根据返回的状态码进行相应处理,如跳转页面,错误提示等 1.引入MessageBox与Message import { MessageBox,Message } from 'elem ...

  8. java中四种引用类型(对象的强、软、弱和虚引用)

    2019独角兽企业重金招聘Python工程师标准>>> 对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...

  9. 039_JavaScript对象访问器

    1. JavaScript访问器(Getter和Setter) 1.1. Getter(get关键词)来获取属性的值. // 创建对象 var person = {firstName: "B ...

  10. Js中的数据属性和访问器属性

    Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...

最新文章

  1. 星巴克、苹果、谷歌、亚马逊等巨头,为何同时做这件事?
  2. XHTML 结构化:使用 XHTML 重构网站
  3. secureCRT连接问题
  4. Inductive Robust Principal Component Analysis
  5. 抢红包的红包生成算法
  6. Debian 项目不再提供 CD 格式的 ISO 镜像
  7. python实现批量压缩文件夹
  8. 监督学习 | 朴素贝叶斯之Sklearn实现
  9. 【转载】4412开发板、PC、ubuntu通过网线连接
  10. 浙大 pat 1023题解
  11. 用C#製作PDF文件全攻略
  12. SAP安装前应准备的事项
  13. 查看dll/exe所依赖的库文件、导出函数、系统位数
  14. C语言表上作业法运输问题,论运输问题表上作业法
  15. vs2013 产品密钥 亲测有效
  16. CFS任务放置代码详解
  17. Flink Data Types Serialization
  18. Python Level 4 程序题:布置任务
  19. java代码控制电脑发出警报_java – 如何使用警报构建器对话框显示消息
  20. 【vconsole】vconsole网页调试

热门文章

  1. atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
  2. paip.提升效率---filter map reduce 的java 函数式编程实现
  3. paip.python php的未来预测以及它们的比较优缺点
  4. Rust : 泛型与trait限定
  5. 进阶之路:Java 日志框架全画传(下)
  6. 【病灶分类】基于matlab粒子群算法优化SVM病灶分类【含Matlab源码 1520期】
  7. 【TSP】基于matlab自适应动态邻域布谷鸟混合算法求解旅行商问题【含Matlab源码 1513期】
  8. 【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】
  9. 【风电功率预测】基于matlab BP神经网络风电功率预测【含Matlab源码 399期】
  10. 无需编码生成信息系统_无需编码即可逐步进行花分类