面向对象三大特性之一是封装,类中的域(变量),尽量使用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. iOS 加密的3种方法
  2. C++:迭代器(STL迭代器)iterator详解
  3. 使用 AppleScript 在 Chrome 中查看当前 Safari 打开的网页
  4. exp/imp迁移表
  5. Linux下 vim代码编译器的使用
  6. 2020.07笔记本选购指南
  7. ant接口用什么天线_拆解测量真假钻石手台天线SRH805S
  8. jdk官网下载账号登陆
  9. zebra 斑马打印机 打印图片
  10. 冰点还原离线激活_冰点还原精灵密钥,小编教你如何激活冰点还原精灵
  11. java基础--狂神
  12. pyqt5 设置动态背景图片
  13. python数据分析中data_dict={h:v for h,v in zip(header,zip(header,zip(*value)}的含义
  14. 【Echarts】数值标签在柱状图上的横向纵向样式调整及数值标签超出图表范围向柱体内部调整移动
  15. 安利安卓模拟器-夜神模拟器
  16. error C2039: ‘tr1‘: is not a member of ‘std‘
  17. nodejs模块加载的猜想
  18. 求绝对值最大值 -java求绝对值
  19. C语言的函数定义和函数声明
  20. new plat (vcam+wifi)项目调试

热门文章

  1. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
  2. PHOTOSHOP使用总结
  3. 资管新政:银行资产管理业务的转型与发展 -中国银行刘东海
  4. (转)每个人都应该读一读贝索斯的致股东信 1997-2016
  5. 有关SQLite数据库的一些实证数据,有一定历史比较和参考意义
  6. OpenStack基金会任命马振强为中国区大使
  7. Apache基金会获得Pineapple基金88.34比特币捐赠
  8. slots游戏html5开发,unity自定义游戏框架Custom Slots fr amework 1.4
  9. 【游戏】基于matlab GUI可调电扇设计【含Matlab源码 1110期】
  10. 【优化预测】基于matlab鲸鱼算法优化LSSVM预测【含Matlab源码 104期】