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

所谓封装性,实际上是表达了一种信息隐藏。从表面上来阐述,就是使用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. 1>MSBUILD : cordova-build error BLD401: 错误: BLD00401: 找不到模块“C:\Users\z-pc\AppData\Roaming\npm\node_modules\vs-tac\app.js”。请转到“工具”-->“选项”-->“Apache Cordova 工具”-->“Cordova 工具”-->“清除 Cordova 缓存”,然后尝试重新生成

    1>------ 已启动全部重新生成: 项目: BlankCordovaApp2, 配置: Debug Android ------1>  Your environment has bee ...

  2. SQL笔记 --- 数据库设计步骤(转)

    SQL笔记 --- 数据库设计步骤 目录 总体设计过程需求分析概念结构设计逻辑结构设计数据库物理设计数据库实施数据库运行和维护 总体设计过程 0 » 下一篇:vim 命令集 posted @ 2012 ...

  3. SQl语句收藏(转)

    /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysq ...

  4. 80C51 K1控制D1发光

    #include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit led = P2^0; sb ...

  5. [读书笔记] 三、搭建基于Spring boot的JavaWeb项目

    一.POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  6. 我理解的Java中重载与重写

    程序中我们用方法来实现对对象的操作,但是对象可能有不同的数据类型,这时候对不同的数据类型,进行相同的操作,我们就可以用到方法的重载,即方法名相同,但是具有不同的参数列表. 方法的重载可以根据传递参数的 ...

  7. Python练习2

    [之前发布到本人的51cto博客,现转过来] 无意看到老男孩的博文:合格linux运维人员必会的30道shell编程面试题及讲解 http://oldboy.blog.51cto.com/256141 ...

  8. 网络唤醒原理浅析(Wake On LAN)

    之前我的一篇文章<网络唤醒全攻略(Wake On Lan)>介绍过如何设置远程唤醒电脑,着重于使用,这篇主要从原理方面解析一下当中的奥妙: 原理 将唤醒魔术包发送的被唤醒机器的网卡上,魔术 ...

  9. SVG基本形状及样式设置

    前面的话 图形分为位图和矢量图.位图是基于颜色的描述,是由像素点组成的图像:而矢量图是基于数学矢量的描述,是由几何图元组成的图像,与分辨率无关.可缩放矢量图形,即SVG,是W3C XML的分支语言之一 ...

  10. Grails笔记一:windows8.1操作系统cmd下grails命令无效

    最近决定使用intellij idea工具来开发基于Grails框架的应用程序,,在安装好jdk 1.7以及配置好jdk和grails环境变量后进行grails测试,在win8.1的命令行窗口中输入以 ...