什么是封装
封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。在电子方面,封装是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接。
也就是说,在程序设计中"封装"就是把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中,比如:类;
把不想对外公开的实现细节隐藏起来,使用private关键字使其私有化,向外暴露public方法,保证调用者安全访问,不会出现因为越界导致本不应该出现的问题出现;
访问权限修饰符
在java中用一些关键字来控制调用者的访问权限
-
private:属于类访问权限,表示私有的,只能在当前类中访问,使用private修饰的类、方法、字段,在’离开当前类的作用域之后,调用者就不能直接访问。
-
(缺省):其实就是什么都不写,其属于包访问权限,表示包私有的,调用者的包必须和当前类(使用缺省修饰)的包相同才能访问。
-
protected:属于子类访问权限,表示受保护的,使用protected修饰的类、方法、字段,不仅同包中类可以访问,而且即使不同包,但是如果有继承关系,也可以访问。
-
public:表示全局的公共访问权限,可以修饰属性和方法,表示在任何的地方都可以使用。接口(interface)中的方法默认都是public的。
在日常的开发中,我们一般都是对类中的属性字段设置为private,对于一些细节的方法,不需要对外提供的我们也设置为private。
一个Model代码
public class Role {
private Integer roleId;
private String roleName;
private Boolean isSystemRole;
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public Boolean getIsSystemRole() {
return isSystemRole;
}
public void setIsSystemRole(Boolean isSystemRole) {
this.isSystemRole = isSystemRole;
}
}
分析:
上面就是一个封装的体现,对于属性roleId、roleName、isSystemRole字段,应该保证它的私有性,所以通过private关键字进行修饰。
$emsp;而对外提供了Getxxx、Setxxx方法用来修改上述字段,所以对外的方法要通过public关键字进行修饰。
封装的好处
在实现一个类是,由于公共的数据非常危险,所以应该将所有的数据字段设置为私有的。
而对于方法,虽然绝大多数方法都被设计为公共的,但是在某些时候,可能希望将一个计算代码分解成若干个独立的辅助方法。最后由一个对外暴露一个公开的方法,随意对于这些辅助方法根本没必要对外公开,最好就是将其设置为私有。这样在日后的改动中,可以明确的知道这个私有方法在其它地方不会有调用。
参考文献:java核心技术 卷1