一、java三大特性--封装

  封装字面意思即包装。专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部进行联系。系统的其他对象只能通过包裹在这个数据外部的已经授权的方法与这个封装对象进行交流和交互。也就是说使用者不用知道这个封装对象内部的细节(当然也是无从知道的),但是可以通过这个封装对象对外提供的接口来访问该对象。

  对于封装而言,它所封装的是自己的属性和方法,所以不需要依赖其他对象就可以完成自己的操作。

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

Husband.java

public class Husband {
    /*
     * 对属性的封装一个人的姓名、性别、年龄、妻子
      * 都是这个人的私有属性
     */
    private String name;
    private String sex;
    private int age;
    private Wife wife;
    /*
     * setter()、getter()是该对象对外开发的接口
     */
    public String getName() {
        return name;
    }
    publicvoid setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    publicvoid setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    publicvoid setAge(int age) {
        this.age = age;
    }
    public void setWife(Wife wife) {
        this.wife = wife;
    }
    //wife不想让别人看见所以不设getter方法
}

Wife.java

public class Wife {
    private String name;
    private int age;
    private String sex;
    private Husband husband;
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
    public String getSex() {
       return sex;
    }
    public void setSex(String sex) {
       this.sex = sex;
    }
    public void setAge(int age) {
       this.age = age;
    }
    //女人的age(年龄)是秘密所以不设置getter方法
    public void setHusband(Husband husband) {
       this.husband = husband;
    }
    public Husband getHusband() {
       return husband;
    }
}

  从上面两个实例我们可以看出Husband里面wife引用是没有getter()的,同时wife的age也是没有getter()方法的。至于理由我想各位都懂的,男人嘛深屋藏娇妻嘛,没有那个女人愿意别人知道她的年龄。

  所以封装把一个对象属性私有化,同时对外提供一些对外方法让外部来访问,如果不想外界访问,我们完全可以不提供对外的访问方法。比如我们将一个房子看做是一个对象,里面的漂亮的装饰,如沙发、电视剧、空调、茶桌等等都是该房子的私有属性,但是如果我们没有那些墙遮挡,是不是别人就会一览无余呢?没有一点儿隐私!就是存在那个遮挡的墙,我们既能够有自己的隐私而且我们可以随意的更改里面的摆设而不会影响到其他的。但是如果没有门窗,一个包裹的严严实实的黑盒子,又有什么存在的意义呢?所以通过门窗别人也能够看到里面的风景。所以说门窗就是房子对象留给外界访问的接口。

  通过这个我们还不能真正体会封装的好处。现在我们从程序的角度来分析封装带来的好处。如果我们不使用封装,那么该对象就没有setter()和getter(),那么Husband类应该这样写:

public class Husband {
    public String name ;
    public String sex ;
    public int age ;
    public Wife wife;
} 

外部调用:

Husband husband = new Husband();
husband.age = 30;
husband.name = "张三";
husband.sex = "男";

  但是那天如果 我们需要修改Husband,例如将age修改为String类型的呢?你只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。如果使用了封装,我们完全可以不需要做任何修改,只需要稍微改变下Husband类的setAge()方法即可。

public class Husband {
    /*
     * 对属性的封装一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name;
    private String sex;
    private String age; /* 改成 String类型的 */
    private Wife wife;
    public String getAge() {
        returnage;
    }
    public void setAge(int age) {
        // 转换即可
        this.age = String.valueOf(age);
    }
    /** 省略其他属性的setter、getter **/
}

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

到了这里我们确实可以看出-->

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

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

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

Husband husband = new Husband();
husband.age = 300;

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

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

public class Husband {
    /*
     * 对属性的封装一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name;
    private String sex;
    private int age; /* 改成 String类型的 */
    private Wife wife;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age > 120) {
            System.out.println("ERROR:error age input...."); // 提示错误信息
        } else {
            this.age = age;
        }
    }
    /** 省略其他属性的setter、getter **/
}

  上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。

public String getSexName() {
    if("0".equals(sex)) {
        sexName = "女";
    } elseif("1".equals(sex)) {
        sexName = "男";
    } else {
        sexName = "人妖???";
    }
    return sexName;
}

  在使用的时候我们只需要使用sexName即可实现正确的性别显示。同理也可以用于针对不同的状态做出不同的操作。

public String getCzHTML() {
    if("1".equals(zt)) {
        czHTML = "<a href=‘javascript:void(0)‘ onclick=‘qy("+id+")‘>启用</a>";
    } else {
        czHTML = "<a href=‘javascript:void(0)‘ onclick=‘jy("+id+")‘>禁用</a>";
    }
    return czHTML;
}

小结  

使用封装的好处:

  1. 良好的封装可以减少耦合。
  2. 类内部结构可以自由修改。
  3. 对成员进行更精确的控制。
  4. 信息隐藏,实现细节。
时间: 2024-11-06 19:07:04

一、java三大特性--封装的相关文章

java三大特性封装、继承、多态

封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员.封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员.封装的基本要求是: 把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

java三大特性之封装

1.封装 封装概述:是指隐藏对象的属性和实现细节,仅仅对外提供公共访问方式. 好处: 隐藏实现细节,提供公共的访问方式 提高了代码的复用性 提高了安全性 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 2.private关键字 private关键字是一个权限修饰分,可以修饰成员变量和成员方法,被private修饰的成员变量或成员方法只能在本类中使用. private最常见的应用:1.把成员变量用private修饰 2.提供对应的setter和getter方法.

初步理解Java的三大特性——封装、继承和多态

声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象

转 OC温故:类的三大特性(封装,继承,多态)

原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符: 1 public,default,protected,private 访问权限依次递减,这样我们在定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过

Java入门——深入理解Java三大特性

Java入门——深入理解Java三大特性 本Blog内容: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法(getter,setter),如果不想被外界方法,我们大可不必提供方法给外界访问. 封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码. 可以对成员变量进行更精确的控制.(在setter方法中进行实际意义的校验) 总结:控制属性访问权限,不是你想改就能改.容易修改属性类型.精确控制属性的取值范围. 继承 继承是使用已存在的类

七、JAVA三大特性

 面向对象三大特性  封装,继承和多态 封装  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面(方法).面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一种信息隐藏技术. 封装是分为两部分:属性的封装,方法的封装.封装起来就是为了对外隐藏. 类本身和方法本身就是一种封装,体现的是装配的含义. 在java中通过关键字private实现封装.什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如

浅谈Java三大特性

Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装,即是隐藏一切可隐藏的东西,对外界只提供最简单的编程接口.比如,在一个类中,把数据和操作方法绑定起来,对数据的访问只能通过这些 get/set 方法(又称为接口)来实现. 为什么封装?比如,我是一个厨师,我有一本食谱,你今天想吃肉,让我帮忙露两手.具体加了多少盐,放了多少醋你不需要关心(隐藏具体实现

跟王老师学Java三大特性(一):案例 QuickHit:需求分析

项目案例:QuickHit:需求分析 主讲教师:王少华   QQ群号:483773664 学习目标 学会用面向对象思想来进行需求分析 一.需求 根据输入速率和正确率将玩家分为不同级别 级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高 规定时间内完成规定次数的输入,正确率达到规定要求,则升级 玩家最高级别为6级.初始级别一律为1级 用户错误输入一次,游戏结束 二.面向对象分析 (一) 发现类 玩家(Player)类 游戏(Game)类 级别(Level)类 (二)发现类的属性 1.玩家