目录
一、介绍
- 封装(encapsulation)就是把抽象出的数据(属性) 和 对数据的操作(方法) 封装在一起
- 数据被保护在内部,程序的其它部分只有通过被授权的操作(方法),才能对数据进行操作
- 隐藏实现细节:方法(连接数据库) <-- 调用(传入参数..)
- 可以对数据进行验证,保证安全合理
二、封装的实现步骤(三步)
- 将属性进行私有化private,不能直接修改属性
- 提供一个公共的(public) set 方法,用于对属性判断并赋值
- 提供一个公共的(public) get 方法,用于获取属性的值(可以获取私有化)
/**
* 封装:
* set方法 传入参数
* get方法 获取参数 可以获取私有化
*/
public class Encapsulation01 {
public static void main(String[] args) {
//调用无参构造器
Student student1 = new Student();
student1.setName("少爷");
student1.setAge(20);
student1.setAddress("12栋");
System.out.println(student1.info());//信息 name=少爷 age=20 address=12栋
//调用有参构造器
Student student2 = new Student("龙部", 21, "12栋");
System.out.println(student2.info());//信息 name=少爷 age=20 address=12栋
}
}
class Student {
public String name;//名字 公开
private int age;//年龄 私有
private String address;//住址 私有
//无参构造器
public Student() {
}
//三个属性的构造器
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
//我们可以将 set 方法写在构造器中,这样可以验证
setName(name);
setAge(age);
setAddress(address);
}
//get 用于获取属性的值
public String getName() {//权限判断,Name属性
return name;
}
//set 用于对属性判断并赋值
public void setName(String name) {// Name属性 (类型 参数名)
//加入对数据的校验,相当于增加了业务逻辑
if(name.length() >= 2 && name.length() <=6 ) {
this.name = name;
}else {
System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
this.name = "无名人";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String info() {//一个返回所有属性的方法
return "信息 name=" + name + " age=" + age + " address=" + address;
}
}