封装
封装
封装(encapsulation)就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作【方法】,才能对数据进行操作。
1、封装的好处:
- 隐藏实现细节方法(连接数据库)<-- 调用(传入参数…)
- 可以对数据进行验证,保证安全合理
2、封装的步骤:
- 将属性进行私有化【不能直接修改属性】
- 提供公共的
set
方法,用于对属性判断并赋值
public void setXxx(类型参数名){
// 加入数据验证的业务逻辑
属性 = 参数名;
}
- 提供一个公共的get方法,用于获取属性的值
public 数据类型 getXxx(){
return xx;
}
3、封装与构造器
当给set
方法添加了条件判断或业务逻辑时,使用默认生成的有参构造器来创建对象会绕过set
方法的条件判断和业务逻辑,例:
class Person{
public String name;
private int age;
// 默认生成的有参构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
// setName
public void setName(String name) {
// 名字长度在2~6之间
if(name.length() >= 2 && name.length() <= 6){
this.name = name;
}else{
System.out.println("名字长度不对!给定默认名字");
this.name = "无名人";
}
}
// setAge
public void setAge(int age) {
if(age > 1 && age < 120){
this.age = age;
}else{
System.out.println("年龄必须在1~120之间,否则给定默认年龄18");
this.age = 18;
}
}
}
public static void main(String[] args) {
Person person = new Person("Vermouth" , 1000);
System.out.println(person);
}
// 此时输出结果为{Vermouth, 1000},未执行年龄的判断
// 所以要进行构造器和set方法的结合,新构造方法如下:
public Person(String name, int age) {
setName(name);
setAge(age);
}