一、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三大特性之多态
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...
随机推荐
- 使用jQuery和CSS3实现一个数字时钟
点击进入更详细教程及源码下载 在线演示 我们经常会在网站中看见一个时钟的效果.今天向大家分享一个使用jQuery和CSS3实现一个数字时钟教程. http://www.html5cn.org/ ...
- debian+python3.5环境下安装paramiko模块:
debian+python3.5环境下安装paramiko模块: 1.确保安装了操作系统安装了libssl-dev,zlib1g-dev (redhat,centos下这两包包名为openssl-d ...
- Oracle win32_11gR2_database在Win7下的安装与卸载
Oracle win32_11gR2_database在Win7下的安装与卸载 by:授客 QQ:1033553122 Oracle的硬件要求 在安装oracle之前,请检查一下自己的电脑硬件是否复合 ...
- C++ UTF8 UrlEncode(宽字符)
为了支持C++ UrlEncode之后的字符串能够被C#所识别(windows phone 下C#只能支持UTF8与 Unicode). 所谓的 UTF8 UrlEncode 也只是宽字符串 UrlE ...
- 使用wxpy来实现自动发送消息统计微信好友信息的功能
发送消息太频繁会出现禁言消息 1:导入wxpy模块 pip install wxpy pip3 install wxpy #二者选一 调用模块 # 导入模块 from wxpy import * # ...
- vuejs组件库pk介绍
vuejs可以说是近2年多以来最火的前端框架,随之而来就产生了非常多的组件库,我们来看看其中比较著名和人气旺盛的几个 1. Vuetify-符合material design设计理念, star数量7 ...
- Jenkins修改workspace和build目录
Jenkins: Change Workspaces and Build Directory Locations 转自: http://ingorichter.blogspot.jp/2012/02 ...
- 监控.net 网站 Glimpse
使用Nuget 安装Glimpse 安装好后,config会默认添加几个节点 安装好之后 只需要浏览器输入 网站/Glimpse.axd 再次进入网站 就可以查看(ajax sql session ...
- IntelliJ idea 如何打开左边项目展开栏
vie->Tool Windows->Project Alt+1 转自:https://blog.csdn.net/bug_moving/article/details/53284434
- Postgresql - jsonb_pretty & dateStyle
1. SHOW datestyle; DateStyle ----------- ISO, MDY(1 row) INSERT INTO container VALUES ('13/01/2010') ...