封装
封装的定义
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
封装的好处
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员进行更精确的控制。
- 隐藏信息,实现细节。
public class Person{
private String name;
private int age;
private String sex;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
private int getAge(){
return age;
}
private void setAge(int age){
this.age = age;
}
public void setSex(String sex){
this.sex = sex;
}
}
那么对于这些属性来说,使用private封装属性的目的就是保护数据,不让人随意破坏,强制只能在本类中使用
如果在其他类中想要通过其他类的对象来调用Man这个类的私有属性,就很不方便,因为设置成了private私有属性
所以会在定义好private之后,在下面再进行public访问的权限的赋值setter和获取getter两种方法的封装
如果没有setter(),getter()的话,那么Person类应该是这样的:
public class Person {
public String name ;
public String sex ;
public int age ;
}
我们应该这样使用它:
Person person = new Person();
person.age = 25;
person.name = "张三";
person.sex = "男";
但是如果需要修改Person,比如将sex修改为int类型,几十或者上百个这样的地方估计要改到崩溃,如果封装了,只需要修改setSex()方法就好了。另外,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。还有针对某些成员变量,不想让其他类知道值为多少,就可以不去做getter()操作,比如Person类中的sex,不想让其他人知道性别,就不做getSex()。还有就是private修饰的成员变量以及成员函数,只能无法在类外调用,做到隐藏的作用。比如:Person类中的成员变量以及getAge()和setAge()在其他类是无法获取到的。
public class Person{
private String name;
private int age;
private int sex;//1:男;2:女;0:保密
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
private int getAge(){
return age;
}
private void setAge(int age){
this.age = age;
}
public void setSex(String sex){
if(StringUtils.isNotEmpty(sex)){
if(sex.equals('男')){
this.sex = 1;
}else if(sex.equals('女')){
this.sex = 2;
}else{
this.sex = 0;
}
}else{
System.out.println("请输入性别!"); //提示错误信息
}
}
}
就是该露的露,该藏的藏
我们在程序设计的过程中要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己来完成,不允许外部干涉,低耦合:就是, 仅暴露少量的方法给外部使用。