一、java三大特性--封装
封装字面意思即包装。专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部进行联系。系统的其他对象只能通过包裹在这个数据外部的已经授权的方法与这个封装对象进行交流和交互。也就是说使用者不用知道这个封装对象内部的细节(当然也是无从知道的),但是可以通过这个封装对象对外提供的接口来访问该对象。
对于封装而言,它所封装的是自己的属性和方法,所以不需要依赖其他对象就可以完成自己的操作。
首先我们先来看两个类:Husband.java、Wife.java
Husband.java
public class Husband {
/*
* 对属性的封装一个人的姓名、性别、年龄、妻子
* 都是这个人的私有属性
*/
private String name;
private String sex;
private int age;
private Wife wife;
/*
* setter()、getter()是该对象对外开发的接口
*/
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
publicvoid setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
publicvoid setAge(int age) {
this.age = age;
}
public void setWife(Wife wife) {
this.wife = wife;
}
//wife不想让别人看见所以不设getter方法
}
Wife.java
public class Wife {
private String name;
private int age;
private String sex;
private Husband husband;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setAge(int age) {
this.age = age;
}
//女人的age(年龄)是秘密所以不设置getter方法
public void setHusband(Husband husband) {
this.husband = husband;
}
public Husband getHusband() {
return husband;
}
}
从上面两个实例我们可以看出Husband里面wife引用是没有getter()的,同时wife的age也是没有getter()方法的。至于理由我想各位都懂的,男人嘛深屋藏娇妻嘛,没有那个女人愿意别人知道她的年龄。
通过这个我们还不能真正体会封装的好处。现在我们从程序的角度来分析封装带来的好处。如果我们不使用封装,那么该对象就没有setter()和getter(),那么Husband类应该这样写:
public class Husband {
public String name ;
public String sex ;
public int age ;
public Wife wife;
}
外部调用:
Husband husband = new Husband();
husband.age = 30;
husband.name = "张三";
husband.sex = "男";
但是那天如果 我们需要修改Husband,例如将age修改为String类型的呢?你只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。如果使用了封装,我们完全可以不需要做任何修改,只需要稍微改变下Husband类的setAge()方法即可。
public class Husband {
/*
* 对属性的封装一个人的姓名、性别、年龄、妻子都是这个人的私有属性
*/
private String name;
private String sex;
private String age; /* 改成 String类型的 */
private Wife wife;
public String getAge() {
returnage;
}
public void setAge(int age) {
// 转换即可
this.age = String.valueOf(age);
}
/** 省略其他属性的setter、getter **/
}
其他的地方依然那样引用(husband.setAge(22))保持不变。
到了这里我们确实可以看出-->
封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。
我们在看这个好处:可以对成员变量进行更精确的控制。
还是那个Husband,一般来说我们在引用这个对象的时候是不容易出错的,但是有时你迷糊了,写成了这样:
Husband husband = new Husband();
husband.age = 300;
也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,毕竟谁见过300岁的老妖怪啊!
但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如:
public class Husband {
/*
* 对属性的封装一个人的姓名、性别、年龄、妻子都是这个人的私有属性
*/
private String name;
private String sex;
private int age; /* 改成 String类型的 */
private Wife wife;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 120) {
System.out.println("ERROR:error age input...."); // 提示错误信息
} else {
this.age = age;
}
}
/** 省略其他属性的setter、getter **/
}
上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。
public String getSexName() {
if("0".equals(sex)) {
sexName = "女";
} elseif("1".equals(sex)) {
sexName = "男";
} else {
sexName = "人妖???";
}
return sexName;
}
在使用的时候我们只需要使用sexName即可实现正确的性别显示。同理也可以用于针对不同的状态做出不同的操作。
public String getCzHTML() {
if("1".equals(zt)) {
czHTML = "<a href='javascript:void(0)' onclick='qy("+id+")'>启用</a>";
} else {
czHTML = "<a href='javascript:void(0)' onclick='jy("+id+")'>禁用</a>";
}
return czHTML;
}
小结
- 良好的封装可以减少耦合。
- 类内部结构可以自由修改。
- 对成员进行更精确的控制。
- 信息隐藏,实现细节。
一、java三大特性--封装的更多相关文章
- Java 三大特性——封装、继承、多态
一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...
- 浅析Java三大特性封装、继承、多态,及作业分析
前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- java三大特性--封装
1.定义: 封装,顾名思义,就是密封包装起来.在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护 ...
- 初步理解Java的三大特性——封装、继承和多态
声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...
- JAVA三大特性之一——封装
自学java已经有一段时间了,但是感觉对于很多知识点还是有必要总结和整理一下,下面我就来说一下我对JAVA三大特性之一——封装特性的认识和理解. 封装,从字面意思可以看出来,就是包装,也就是把我们写好 ...
- JAVA基础第二章-java三大特性:封装、继承、多态
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- java三大特性:封装、继承、多态
Java三大特性之封装 一.定义 封装性指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 二.使用封装的好处: 1 ...
- JAVA三大特性之多态
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...
随机推荐
- html的标签分类————body内标签系列
超链接标签 <a href="" target="_blank">text</a>,此类标签通常是超链接.其中href后面跟进的是超链接 ...
- 如何将web项目部署到Ubuntu服务器上
情景回顾: 前几天在下本着人道主义原则帮我老师的一个朋友做了个小网页,(啥人道不人道的,主要是给钱了),做完之后本来是想偷懒直接把网页扔给他自己部署去吧,结果让我帮忙部署一下,得,偷懒也偷不成了,搞吧 ...
- Session Cookies随笔
1.对于Session而言 它是用来保存在服务端的信息,可以用来做登录验证,在后台保存有用信息. 一个浏览器访问一个网站,就是建立一个连接,连接信息是独立的,就是在该建立的连接内,保存到Session ...
- uCrop图片裁剪
uCrop使用 github地址 https://github.com/Yalantis/uCrop然后clone或下载到本地,运行之. 效果预览 app/build.gradle compile ' ...
- Java String和Date的转换
String—>Date方法一: String dateString = "2016-01-08"; try { SimpleDateFormat sdf = new Sim ...
- Java ——基础语法
package myhello; // 本类所在的包的路径 import af.util.AfMath; // 导入对应的类 import java.util.Random; // 导入随机数的类 p ...
- Linux 设备树的解释 - DTB文件格式【转】
https://blog.csdn.net/cc289123557/article/details/51782449 1.dtb文件格式 dtb文件的格式如下图 : NOTE:不同部分顺序可能不一样 ...
- sysfs_create_group创建sysfs接口
在调试驱动,可能需要对驱动里的某些变量进行读写,或函数调用.可通过sysfs接口创建驱动对应的属性,使得可以在用户空间通过sysfs接口的show和store函数与硬件交互: Syss接口可通过sys ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二)本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法. ...
- [HDFS_add_2] SecondaryNameNode 滚动 NameNode 数据流程
0. 说明 在 将 SecondaryNameNode 配置到 s105 节点上 的基础上进行 SecondaryNameNode 滚动 NameNode 数据流程 分析 1. SecondaryNa ...