类是构造对象的模板或蓝图。
封装的一些概念
从形式上看,封装不过是将数据和行为组合到一个包中,并对对象的使用者隐藏了数据的实现形式。
每个对象都包含实例域和方法。实例域的集合代表了一个集合的状态,通过方法来向对象发送消息,改变对象的状态。
封装的意义
实现封装的目的就是不让其他类的方法访问自己的实例域。
程序是通过类的方法进行交互。封装给了对象黑盒的特性,这是提高重用性和可靠性的关键。
降低了类之间的耦合性
一个对象无法访问其他的类的对象的数据,所以不对其他的类依赖,降低了耦合性。
方便数据域的错误检查
可以直接查找类的相应的方法,而不用排查其他的情况。
封装的注意事项:
不要编写返回引用可变对象的访问器方法
举个例子:
class Emplyee{
private Date day;
public Date getDay(){
return day;
}
}
上面的例子破坏了封装性
Emplyee harry;
Date d = harry.getDay();
d.setTime(new Date(););
出错的原因
d和day引用的是一个对象。对d改变。对象的私有实例域也会改变。
如何避免:
返回一个可变对象引用的克隆。
class Emplyee{
private Date day;
public Date getDay(){
return day.clone();
}
}