1.介绍
封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作
2.好处
隐藏实现的细节:方法(连接数据库)<----调用(传入参数)
可以对数据进行验证,保证安全合理
3.实现步骤
-
将属性私有化private(不能直接修改属性)
-
提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型 参数名){
//加入数据验证的业务逻辑
属性 = 参数名;
}
-
提供一个公共的get方法,用于获取属性的值
public 数据类型 getsetXxx(){
return xx;
}
eg:不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄, 必须在 1-120, 年龄, 工资不能直接查看 , name 的长度在 2-6 字符 之间
public class fengzhuang { public static void main(String[] args) { Person person = new Person(); person.setName("zyf"); person.setAge(30); person.setSalary(30000); System.out.println(person.info()); System.out.println(person.getSalary()); } } class Person{ public String name; private int age; private double salary; public String getName() { return name; } public void setName(String 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) { //判断 if(age >= 1 && age <= 120) {//如果是合理范围 this.age = age; } else { System.out.println("你设置年龄不对,需要在 (1-120), 给默认年龄 18 "); this.age = 18;//给一个默认年龄 } } public double getSalary() { //可以这里增加对当前对象的权限判断 return salary; } public void setSalary(double salary) { this.salary = salary; } //写一个方法,返回属性信息 public String info() { return "信息为 name=" + name + " age=" + age + " 薪水=" + salary; } //有三个属性的构造器 public Person(String name, int age, double salary) { // this.name = name; // this.age = age; // this.salary = salary; //我们可以将 set 方法写在构造器中,这样仍然可以验证 setName(name); setAge(age); setSalary(salary); } }