实习一结束就要面临着找工作了,趁在公司这段时间,夯实一下java基础,毕竟,自己还是一个菜鸡。
封装就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据类型和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其它对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和互动。
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不依赖其它对象就可以完成自己的操作。
使用封装的三大好处:
- 良好的封装能减少耦合
- 类内部的结构可以自由修改
- 可以对成员进行更精确的控制
- 隐藏信息和实现细节
简单的例子:
public class Man{
/**
* 对属性的封装
* 姓名,年龄,性别,配偶
*/
private String name;
private Int age;
private WIFE wife;
/**
*setter() getter()是对该对象的对外接口
*/
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Int getAge(){
return age;
}
public void setAge(Int age){
this.age = age;
}
public void setWife(WIFE wife){
this.wife = wife;
}
}
Man里面的wife属性没有getter()方法,道理都懂得,男人嘛。
所以封装就是把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界访问,我们就不用提供getter()方法。但是如果一个类没有提供给外界访问的方法,那么这个类也就没什么意思了。比如你把所有值钱的东西都放柜子里却没有留钥匙,这些东西拿不出来,也没啥用。
对于没有封装的例子:
public class Man{
String name;
Int age;
WIFE wife;
}
外界使用时,必须:
Man laowang = new Man();
laowang.name = "laowang";
laowang.age = 34;
如果一时大意,laowang.age设为300,这就不符合实际了。使用封装就可有效避免这个错误;
//修改setAge()方法如下
public void setAge(Int age){
if(age > 120){
system.out.println("age error!");
}else{
this.age = age;
}
}
假如有一天你修改了age的属性为String,而且使用了很多处,如果没使用封装,估计一个一个改要改到崩溃。如果使用了封装,只需要稍微修改一下setAge()方法。
//修改setAge()方法如下
public void setAge(Int age){
if(age > 120){
system.out.println("age error!");
}else{
this.age = String.valueOf(age);
}
}
=================================
在编程实践中,对于简单的POJO类,我们更倾向于把所有成员都设为public,同时,再加一个构造函数一次性初始化所有成员,这样要比使用一堆set和get函数简洁明快的多。在Android源码里,大量使用这种手法。