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

所谓封装性,实际上是表达了一种信息隐藏。从表面上来阐述,就是使用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. js的点表示法和方括号表示法

    最近发现了一个很好玩的js特性,就是任何可以用点表示法的语句,都可以同样用方括号表示法表示出来,就例如一下语句,三句都是可以实现的: document.body.innerHTML="tes ...

  2. Bash中的测试——test, [], [[]], (())

    转自: http://blog.csdn.net/u013961718 https://www.shiyanlou.com/courses/running test 和 [ ] test是一条内置命令 ...

  3. MVC项目中使用百度地图

    已经很久没更新博客了,因为最近一直在学习前端的知识,没那么多时间,写博客或者写文章不但没有钱,写得好还好说,如果写得不好,一些吃瓜群众,不仅要喷你,搞不好还要人身攻击就不好了.所以写博客的人,脸皮得厚 ...

  4. 微信app支付android客户端以及.net服务端实现

    由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来 ,希望能对.net开发者服务端网站更快的集成微信app ...

  5. Linux桌面环境GNOME实用技巧

    GNOME是Linux桌面上主流的集成桌面环境之一,GNOME桌面以其风格简洁.操作便捷而受到Linux用户的欢迎.这里将介绍Linux桌面环境GNOME的操作技巧,在这里拿出来和大家分享一下. 下面 ...

  6. vue开发项目的坑

    [Vue warn]: Do not use built-in or reserved HTML elements as component id: MenuItem [Vue warn]: Do n ...

  7. CSS高级技巧

    使用CSS复位 CSS复位可以在不同的浏览器上保持一致的样式风格.您可以使用CSS reset 库Normalize等,也可以使用一个更简化的复位方法:· * { box-sizing: border ...

  8. 利用mvc filterconfig属性实现权限验证

    好久没写过博客了,突然发现最后博客更新时间是2016年,感觉好长远 权限控制基本是所有cms系统或者进销存,或者几乎所有能和业务系统扯上关系的系统都要用上的一个模块,很多都想把这个模块独立出来,权限单 ...

  9. find the Nth highest salary(寻找第N高薪水)

    Suppose that you are given the following simple database table called Employee that has 2 columns na ...

  10. js中匿名函数

    今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log ...