Java核心技术第四章——1.封装性
封装性(有时称为数据隐藏):
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值。程序仅通过对象的方法与对象的数据进行交互。
给对象赋予了“黑盒”的特征,提高了重用性和可靠性。简而言之,就是只需知道方法对应的作用,而不必了解它的具体实现过程。
有些时候,需要获得或设置实例域的值,应该提供下面三项内容:
1.一个私有的数据源;
2.一个公有的域访问器方法
3.一个公有的域更改器方法
私有的数据域:
私有数据域即写在全局的私有变量或常量。私有数据域要比公有数据域要复杂,因为需要增加私有数据域对应的域访问器和域更改器方法,但是却有下列明显好处:
- 1 在该类的方法中修改实现方式,不会影响到其他的代码,如修改getBrithday的返回值和修改其内部实现方式。

2.1 如果出现异常,那么更改器方法(即set方法)可以执行错误检查(debug)。若是公有的数据域,可以直接对其赋值,那么错误出现的地方就可能有很多了。
公有的访问器和更改器方法:
访问器访问则是get方法,更改器方法则是set方法。此处需要注意:尽量不要返回引用可变对象的访问器方法。看不懂?看下图:

因为Date类型中有setTime方法,如果直接返回引用对象,并且再使用setTime修改其对象,那么就会破坏掉封装性。而应该使用Object的clone(克隆)方法进行拷贝数据域,如下图

当要修改UserInfo中的brithday时,再调用其对应的更改器方法(setBrithday)即可。
木木只是一个小白,若那里写的不好或者有更好的建议,请留言 或 发到我的QQ邮箱 821312534@qq.com 。谢谢大家啦~(*^▽^*)
Java核心技术第四章——1.封装性的更多相关文章
- Java核心技术第四章——2.final 和 static
final实例域 实例域(对象的属性)可修饰为final.修饰为final后,在构建对象时必须初始化这个实例域.若没有在实例域进行初始化,那么必须在每个构造器内初始化这个实例域(否则会编译错误). 表 ...
- [Java核心技术]第四章-对象与类(4.1-4.6总结)
4.1面向对象程序设计概述 OOP(面向对象编程Object Oriented Programming) OOP中数据第一位,算法第二位. 类 封装:关键在于不能让其他方法直接访问类的实例域,程序仅通 ...
- Java核心技术第四章——3.对象构造
重载: 如果多个方法(包含构造方法)有相同的名字.不同的参数,便产生重载.编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配挑选出相对应的方法. 如果 ...
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第四章:catch代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第九十四章:局部内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十四章:二进制、八进制、十六进制
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- H5、React Native、Native应用对比分析
每日更新关注:http://weibo.com/hanjunqiang 新浪微博!iOS开发者交流QQ群: 446310206 "存在即合理".凡是存在的,都是合乎规律的.任何新 ...
- 用API给用户添加职责
DECLARE lc_user_name VARCHAR2(100) := 'PRAJ_TEST'; lc_resp_appl_short_name VARCHAR2(100) := 'FND' ...
- android git上开源的项目收藏
本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...
- 学习TensorFlow,浅析MNIST的python代码
在github上,tensorflow的star是22798,caffe是10006,torch是4500,theano是3661.作为小码农的我,最近一直在学习tensorflow,主要使用pyth ...
- android下在屏幕适配小总结
为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想 同 ...
- Web开发的发展史
英文出处:arunr.欢迎加入翻译小组. 导读:Arunr 把过去 15 年以来,Web开发从最初的纯 HTML 到 CGI.PHP\JSP\ASP.Ajax.Rails.NodeJS 这个过程简要地 ...
- moonmq: 用go实现的高性能message queue
介绍 moonmq是一个用go实现的高性能消息队列系统,后续准备用于我们消息推送服务以及各个后台的异步任务. 在设计上面,moonmq主要借鉴了rabbitmq以及rocketmq相关的思想,但是做了 ...
- Socket编程实践(1) --TCP/IP简述
ISO的OSI OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为: OSI七层参考模型 物理层(Phys ...
- 动态创建VIEW
很多人都应该知道 global temporary table 的用法,这里也提出一个动态VIEW的用法,在实际过程中有着很好的独特之处 具体如下: /***************创建PACKAGE ...
- OJ题:成绩排序
题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...