封装
概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。是面向对象三大特征之一。
好处:将变化隔离。提高重用性。提高安全性。
封装原则:
• 将不需要对外提供的内容都隐藏起来。
• 把属性都隐藏,提供公共方法对其访问。
Java中可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。
如下面的这个student类,就是使用了封装,将类中的属性name 、age和score私有化,使外部不能直接访问他们,只能通过public类型的对他们方法进行操作。
class Student {
private String name;//声明属性 ,并设为私有类型,起到封装的作用
private int sex;
public String getName() { //设置getter方法,因为变量设为了私有,对象无法访问类中的属性,需要用getter方法获取变量
return name;
}
public void setName(String name) { //设置setter方法,因为变量设为了私有,对象无法访问类中的属性,需要用setter方法给变量赋值
this.name = name;
}
public int getSex() {
return sex;
}
public void setAge(int age) {
this.age = age;
}
}
java中这样做的原因:
- 将数据与行为分离,也就是java的面向对象的概念。
对象就是属性+行为,封装就是把对象的私有属性封装起来,只有通过自己公开的行为去改变(获得)对象内部的私有属性信息,而那些public的方法正是面向其他对象的接口,只有通过接口去改变(获得)对象的私有属性。
- 安全性
设想,上面的student类的sex字段表示性别,理论上,sex只接受两个值, '0 '和 '1 ',但如果你把sex字段设为public,你很难限制你的用户只给它赋 '0 '或 '1 '值。将sex设为private,再用setSex()来设置性别,你就完全可以控制这种行为了。而且你还可以控制只能get不能set,或相反,但如果是public就不行了。别外有一点属性我们可能并不希望其他用户对我们的属性进行写操作,这个时候,可以直接不写setX方法。这就是只读属性了。