Java三大特性——封装

本文基本就是参考这位大佬[# java基础(一)-----java的三大特性之封装,写一遍只是为了加深印象。

封装

概念

封装字面意思就是包装,用专业语言描述就是信息隐藏,指利用抽象数据结构将数据和基于数据的操作封装在一起,成为一个不可分割的独立实体(类)。然后对外提供一些指定权限的公共接口,供其余用户使用。这就好比与,一个汽车引擎,你给它准备好油,它会在你需要的时候,给你输出动力。但是对于引擎内部的各个构件,你是无需得知的。

封装优点

本文介绍Java三大特性之一的封装,先阐述封装带来的优点:
1、良好的封装能减少耦合。(单一原则)
2、类内部的结构可以自由修改。(比如get或者set方法中添加逻辑)
3、可以对成员进行更精确和方便的控制。(与第二条相似)
4、隐藏信息,实现细节。

程序描述

下面我们通过程序描述上面优点:

public class MonthValue {
    //月份
    private int month;
    //收入
    private int inCome;
    //消费
    private BigDecimal consume;
    //存储
    private BigDecimal save;

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public BigDecimal getConsume() {
        return consume;
    }

    public void setConsume(BigDecimal consume) {
        this.consume = consume;
    }

    public void setSave(BigDecimal save) {
        this.save = save;
    }
}

这个类记录的是某个月Money收入和支出情况。
有没有发现,这个类没有getIncome的方法,毕竟,收入也算是一个人的隐私信息。封装,就可以很好的保护到隐私信息。

接着,我们来考虑下,如果没有封装,上面的类会变成什么样子?

public class MonthValue {
    //月份
    public int month;
    //收入
    public int inCome;
    //消费
    public BigDecimal consume;
    //存储
    public BigDecimal save;
}

假如没有封装,首先get、set方法等一系列方法需要去除。然后所有的成员属性需要改成public(或者直接用map封装),通过对象.成员属性赋值(或者Map的setValue)。程序中,如果只有单个使用,没有问题。但是如果有多个地方使用这个类,某天,你需要将totalMoney的类型修改为BigDeciaml,那样你只能在业务代码中一个一个改。但是有封装的话,你只需要在set方法中进行类型转换即可。这样不仅增加了代码的可维护性,也增加了代码的阅读性(因为一般类的名字都是有说明意义的)。

最近,因为各种原因,想要多存点钱,我们将setSave方法改成这样:

public void setSave(BigDecimal save) {
        inCome = inCome - 100;
        save = BigDecimalUtil.moneyAdd(save,new BigDecimal("100"));
        this.save = save;
    }

这样,我们每个月可以多存100块了。修改自己类的结构是不是很方便,并且还能控制到各个实例成员,告诉他们都要多存点钱。当时,如果save是的0的话,享受生活~
如果有问题,欢迎指出。
学习永无止境,我们一起进步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。