本文基本就是参考这位大佬[# 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的话,享受生活~
如果有问题,欢迎指出。
学习永无止境,我们一起进步。