我们知道,面向对象开发的三大特点是:封装性、继承性、多态性

所谓封装性,实际上是表达了一种信息隐藏。从表面上来阐述,就是使用private修饰符来对属性或者方法进行信息隐藏,而使用public的方法控制访问

例如,属性使用private,方法使用public,则:
public class Person { 

    private String name;

    public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
x
 
1
public class Person { 
2

3
    private String name;
4

5
    public String getName() {
6
        return name;
7
    }
8

9
    public void setName(String name) {
10
        this.name = name;
11
    }
12

13
}

那么如上,这样一来,你想获取一个Person对象的name属性的话,你就不能使用类似于 zhangsan.name 的方式,而必须使用 zhangsan.getName()

这样是为了更好的进行数据隐藏,要知道,在程序开发的过程中是靠多人协作完成的,也就是说程序员A可能会用到程序员B写的某个方法,如果程序员B的所有属性和方法都是暴露的,那么程序员A在使用时完全可能会因为不熟悉(因为毕竟不是他自己写的)而错误调用方法,或者更改了属性,最终就会出现bug。所以使用封装,我只暴露出来别人需要用到的方法,其他的他们无法访问,那么就大大降低了误用的风险。

另外,数据的封装,如最常见的各类属性用private限制,而使用public开放的getter和setter来操作,因为很多时候并没有设定特殊的动作,让人感到多此一举,实际不然。

getter和setter真正的好处在于,万一某天你发现这个变量需要限制,那么你只需要更改getter和setter中的代码,而其他已经通过getter和setter来调用属性的地方不用重复地去修改。

想象一下你所有的属性都是public,其他的地方直接调用,当有一天你需要限制变量,如某属性不能为负数了,怎么办?每个调用的地方修改一下,去使用if语句判断是否大于0,那假如我调用了1000个地方呢?10000个地方呢?

最后,对于封装的说明,这位网友的博客进行了更详细的说明,推荐一波:java提高篇(一)-----理解java的三大特性之封装


[05] 利用private来封装的更多相关文章

  1. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...

  2. 004-对象——public protected private PHP封装的实例

    <?php /** *public protected private PHP封装的实例 */ /*class tv { private $shengyin; function __constr ...

  3. 利用jdbc简单封装一个小框架(类似DBUtils)

    利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...

  4. 如何利用UDP协议封装一个数据包

    在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议.一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输 ...

  5. 利用gsoap库封装易用的rest框架

    c++缺少web开发的框架,web框架分为异步和同步,异步的业务逻辑控制需要较强功底,同步代码实现起来容易,利于阅读理解 1.gsoap是c++写的webservice库,webservice应用层也 ...

  6. 05 利用Appliction 传值Activity

    步骤一:新建一个类继承Application必须是public class 不然直接奔溃 步骤二:在清单文件AndroidManifest.xml的application添加name属性 值为com. ...

  7. 利用面向对象思想封装Konva动态进度条

    1.html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. OC语言基础之利用property优化封装

    1.property功能用法 1: // @property:可以自动生成某个成员变量的setter和getter声明 2: @property int age;//可以直接免去变量的声明 3: // ...

  9. 编程从入门到提高,然后放弃再跑路(Java)

    1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利用p ...

随机推荐

  1. JavaScript入门之Canvas(一): 2D Context

    概念 Canvas    是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形.例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或渲染.自HTML5添 ...

  2. webpack2+node+react+babel实现热加载(hmr)

    前端工程化开发的一个重要标志就是热替换技术,它大大的提高开发效率,使我们专注于写代码,webpack2中的热替换相比较1更加简洁. 1. 先看效果 2.目录结构 3.项目目录结构文件描述 bin 执行 ...

  3. HTML,CSS,JS之间的关系

    HTML,CSS,JS之间的关系 本笔记是自己在浏览了各位前辈后拼凑总结下来的知识,供自己使用消化.后面会附上各种链接地址,尊重原创 最准确的网页设计思路是把网页分成三个层次,即:结构层(HTML). ...

  4. HTML DOM (文档对象模型)

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过可编程的对象模型,JavaScrip ...

  5. Redis在电商中的实际应用-Java

    示例代码用Jedis编写. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻 ...

  6. [js高手之路]this知多少

    this关键字在javascript中的变化非常的灵活,如果用的不好就非常恶心,用的好,程序就非常的优雅,灵活,飘逸.所以掌握this的用法,是每一个前端工程师必知必会的.而且这个也是一些大公司笔试中 ...

  7. Java开源连接池c3p0的基本用法

    前言:其实c3p0只是一个实现了javax.sql 接口 DataSource的一个工具集,使用c3p0可以帮我们管理宝贵的Connection资源,无须我们去创建连接(免去每次配置数据库驱动,url ...

  8. Linux巩固记录(1) J2EE开发环境搭建及网络配置

    由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了 以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上 ...

  9. mongodb菜鸟整理 2 C#Driver使用

    一下载 从官网上下载... 二 引用 下载完了将其解压到某个文件夹内,打开vs建立一个工程 右键引用,找到刚才解压的目录,把里面说有的dll文件全部添加就好 三 命名空间 我都是先打然后alt+shi ...

  10. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) python代码报错

    import sys reload(sys) sys.setdefaultencoding('utf-8')