•通过代码深入了解

首先我们先来看两个类:Husband.java、Wife.java;

HusBand.jaba:

public classHusband {/** 对属性的封装

* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性*/

privateString name ;privateString sex ;private intage ;privateWife wife;/** setter()、getter()是该对象对外开发的接口*/

public voidsetName(String name) {this.name =name;

}public voidsetSex(String sex) {this.sex =sex;

}public void setAge(intage) {this.age =age;

}public voidsetWife(Wife wife) {this.wife =wife;

}publicString getName() {returnname;

}publicString getSex() {returnsex;

}public intgetAge() {returnage;

}

}

Wife.java:

public classWife {privateString name;private intage;privateString sex;privateHusband husband;public voidsetName(String name) {this.name =name;

}public void setAge(intage) {this.age =age;

}public voidsetSex(String sex) {this.sex =sex;

}public voidsetHusband(Husband husband) {this.husband =husband;

}publicString getName() {returnname;

}publicString getSex() {returnsex;

}publicHusband getHusband() {returnhusband;

}

}

从上面两个实例我们可以看出 Husband 类里 wife 引用是没有 getter() 的,同时 Wife 的 age 也是没有 getter() 方法的。

至于理由我想各位都懂的,男人嘛深屋藏娇妻嘛,没有那个女人愿意别人知道她的年龄。

所以封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法;

如果不想被外界访问,我们大可不必提供方法给外界访问。

但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

比如我们将一个房子看做是一个对象,里面的漂亮的装饰,如沙发、电视剧、空调、茶桌等等都是该房子的私有属性;

但是如果我们没有那些墙遮挡,是不是别人就会一览无余呢?

没有一点儿隐私!

就是存在那个遮挡的墙,我们既能够有自己的隐私而且我们可以随意的更改里面的摆设而不会影响到其他的。

但是如果没有门窗,一个包裹的严严实实的黑盒子,又有什么存在的意义呢?

所以通过门窗别人也能够看到里面的风景。

所以说门窗就是房子对象留给外界访问的接口。

通过这个我们还不能真正体会封装的好处,现在我们从程序的角度来分析封装带来的好处;

如果我们不使用封装,那么该对象就没有 setter() 和 getter(),

那么Husband类应该这样写:

public classHusband {publicString name ;publicString sex ;public intage ;publicWife wife;

}

我们应该这样来使用它:

Husband husband = newHusband();

husband.age= 30;

husband.name= "张三";

husband.sex= "男"; //貌似有点儿多余

但是哪天如果我们需要修改Husband,例如将 age 修改为 String 类型的呢?

你只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。

如果使用了封装,只需要稍微改变下 Husband类 的 setAge() 方法即可:

public classHusband {/** 对属性的封装

* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性*/

privateString name ;privateString sex ;private String age ; /*改成 String类型的*/

privateWife wife;public void setAge(intage) {//转换即可

this.age =String.valueOf(age);

}publicString getAge() {returnage;

}/**省略其他属性的setter、getter **/}

其他的地方依然那样引用 (husband.setAge(22)) 保持不变。

到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。

我们在看这个好处:可以对成员变量进行更精确的控制。

还是那个Husband,一般来说我们在引用这个对象的时候是不容易出错的,但是有时你迷糊了,写成了这样:

Husband husband = newHusband();

husband.age= 300;

也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,毕竟谁见过300岁的老妖怪啊!

但是使用封装我们就可以避免这个问题,我们对 age 的访问入口做一些控制,如:

public classHusband {/** 对属性的封装

* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性*/

privateString name ;privateString sex ;private int age ; /*改成 String类型的*/

privateWife wife;public void setAge(intage) {if(age > 120){

System.out.println("ERROR:error age input...."); //提示错误信息

}else{this.age =age;

}

}public intgetAge() {returnage;

}/**省略其他属性的setter、getter **/}

上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。

例如性别我们在数据库中一般都是已 0、1 方式来存储的;

但是在前台我们又不能展示 0、1,这里我们只需要在 getter() 方法里面做一些转换即可。

publicString getSexName() {if(sex.equals("0")){

sexName= "女";

}else if(sex.equals("1")){

sexName= "男";

}else{

sexName= "人妖???";

}returnsexName;

}

在使用的时候我们只需要使用 sexName 即可实现正确的性别显示。

同理也可以用于针对不同的状态做出不同的操作。

如何理解封装java_理解 Java 的三大特性之封装相关推荐

  1. java的封装性的优点_18、Java的三大特性之封装

    Java的三大特性 java是一个面向对象的语言,所以java也有面向对象语言的三大特性:继承,封装,多态,任何一个java项目,都会用到这三种特性,所以掌握好这三大特性非常的重要. 封装 我们为什么 ...

  2. Java——OOP三大特性之封装性(Encapsulation)通俗详细

    面向对象(Object Oriented Programming)三大特性 1.封装(Encapsulation) 2.继承(Inheritance) 3.多态(Polymorphism) 定义 En ...

  3. Java的三大特性之封装、继承、多态-----最简理解

    根据网上其他地方的解释,以及查找资料,将自己对java三大特性的理解展示如下. 封装:(属性私有,set/get,在set中限定一些不安全的情况) 封装是指把一个对象的状态信息(也就是属性)隐藏在对象 ...

  4. java 面向对象三大特性之封装 万字详解(超详细)

    目录 前言 : 一.为什么需要封装 : 前言 : 1.封装的好处 : 2.java中的常见封装体: 二.封装简介 : 1.封装的概念 : 2.封装的关键 : 三.private关键字(重要) : 1. ...

  5. java基础----(三大特性:封装,继承,多态)

    封装 将对象的转态信息隐藏在对象内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对内部信息的访问和操作. 封装的好处: 隐藏类的实现细节 使用者只能通过事先预定的方法来访问数据,从而可以在该 ...

  6. java面向对象三大特性:封装、继承、多态——举例说明

    概念 封装:封装就是将客观的事物抽象成类,类中存在属于这个类的属性和方法. 继承:继承就是把父对象继承过来,这样子类就存在了父类的操作方法,java是单继承,就是只能继承一个父对象. 多态:多态就是程 ...

  7. java的三大特性,封装,继承,多态

    封装 Java代码   /** * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用, * 被封装的成员只能通过某些特定的方式才能访问. * 实现封装有两个步骤: *   ...

  8. Java的三大特性:封装、继承、多态

    一.类的概念: 类一般包括两个部分:属性(成员变量)和方法(成员方法) 方法组成部分:修饰符(可选) 返回值类型(必须) 方法名(必须)参数列表(可选) package com.classTest.p ...

  9. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

最新文章

  1. Java基础班学习笔记(8)
  2. 为什么 OLAP 需要列式存储
  3. CentOS6.5编译安装apache2.4--有软件包!
  4. python顺序结构实验_Python程序设计实验报告二:顺序结构程序设计
  5. 前端学习(2816):原生框架目录结构
  6. 让你的Mac读给你听,还能听写,用来练习英语口语!
  7. 利用JMeter进行Web测试(简介适合初学者)
  8. 【项目调研+论文阅读】基于医学文献的实体抽取(NER)方法研究 day5
  9. Data crossstore between Mongo and JPA
  10. OpenCV_cv::Mat的深拷贝 浅拷贝问题
  11. 小技巧:Windows快捷键快速打开程序
  12. mysql触发器预约实例_Mysql触发器实例分析
  13. 诺兰模型(百度百科)
  14. GPU VS FPGA对比
  15. 考研英语近义词与反义词·一
  16. 第一季 停课模拟考试整理(完结)
  17. 你真的了解composer吗
  18. 推荐两款好用的企业级内网穿透软件
  19. 第四章分支结构程序设计
  20. 学计算机有哪些推荐书籍?

热门文章

  1. Download failed : Oracle JDK 7 is NOT installed,解决oracle jdk7的问题
  2. 解决webpack4版本在打包时候出现Cannot read property ‘bindings‘ of null 或 Cannot find module ‘@babel/core‘问题
  3. sql脚本过大,无法打开的解决方法
  4. 【报告分享】2019年度薪酬白皮书.pdf(附下载链接)
  5. 【回顾】推荐系统中基于深度学习的混合协同过滤模型
  6. 震惊!原来leetcode竟然真的能中奖?
  7. 迭代最近点算法Iterative Closest Point(ICP)以及c++实现代码
  8. 指针大小为什么与类型无关?
  9. CIKM'21 | 谷歌:推荐中的自监督对比学习
  10. mysql skip remarks_mysql DatabaseMetaData 获取table remarks为空的解决办法