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

所谓封装性,实际上是表达了一种信息隐藏。从表面上来阐述,就是使用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. 浅谈.NET,C#三层架构

     三层架构 常见架构: 三层(经典) MVC MVVM MVP   开发中常见的23种设计模式: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种: ...

  2. Java并发基础——Thread

    并发编程可以使我们将程序划分为多个分离的,独立运行的任务.通过多线程机制,这些独立任务都将由执行线程来驱动.在使用线程时,CPU将轮流给每个任务分配占用时间,每个任务都觉得自己在占用CPU,但实际上C ...

  3. Win7桌面底部的任务栏高度的修改

    Win7桌面底部的任务栏高度的修改.. ----------win7中,任务栏比较宽,有些用户的电脑分辨率比较低,就显得非常占地方,这时可将任务设置成窄模式,图标小图标.鼠标移动到状态上,点击右键.- ...

  4. 7.21.06 java内存模型

    资料来源:http://www.cnblogs.com/smile361/archive/2013/11/25/3441553.html 程序计数器: 当前线程所执行的字节码的行号指示器 本地方法栈: ...

  5. JavaScript笔记之第一天

    JavaScript 1.JavaScript 显示数据 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() 弹出警告框. 使用 document.write() ...

  6. [Spring面试] 问题整理

    1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC:Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spri ...

  7. [Caffe]使用经验积累

    Caffe使用经验积累 本贴记录Caffe编译好了,使用过程的常用命令与常见错误解决方式.如果对编译过程还存在问题,请参考史上最全的caffe安装过程配置Caffe环境. 1 使用方法 训练网络 xx ...

  8. Django 模板.html中 href参数传入

    在Django模板中可能会出现访问多个URL指向同一函数,为减少代码可以利用正则表达式实现 url(r'^remove_userinfo(?P<nid>\d+)/',views.remov ...

  9. java 读取json

    http://blog.csdn.net/5iasp/article/details/38545875 private void readAccount() throws IOException { ...

  10. Git学习总结(一)

    .常用Git命令清单 一.新建代码库 #在当前目录创建一个Git代码库 $ git init #新建一个目录,将其初始化为Git代码库 $ git init [project name] #下载一个项 ...