封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。
(1)隐藏实现细节 方法(连接数据库)<-----调用(传入参数...)
只负责调用,封装的细节不考虑
(2)可以对数据进行验证,保证安全合理。
(1)将属性进行私有化private(不能直接修改属性)
(2)提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型,参数名){
Xxx表示某个属性
//加入数据验证的业务逻辑
属性=参数名
}
(3)提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getXxx(){
//权限判断,Xxx某个属性
return xx
}
}
代码:
package com.hspedu.encap;
public class Encapsulation01 {
public static void main(String[] args) {
Person person = new Person();
// 谁调用我this指向谁
person.setName("jac");
person.setAge(30);
person.setSalary(30000);
System.out.println(person.info());
}
}
class Person {
public String name; //名字公开
private int age;//年龄私有化
private double salary;//工资私有化
// 自己写setXxx和getXxx太慢了
// 然后根据要求来完善我们的代码
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;
}
}
通过上面的案例,
setXxx
对名字的长度进行逻辑判断。
调用:
Person person = new Person();
// 谁调用我this指向谁
person.setName("jac");
public void setName(String name) {
// 加入对数据的验证
if (name.length() >= 2 && name.length() <= 6) {
this.name = name;
} else {
System.out.println("名字的长度,需要(2-6)字符");
this.name = "无名人";
}
}
这个jac以实参的形式传递给name,对name进行判断,如果字符的长度是2-6位则直接赋值,这里的this
谁调用我this指向谁,这里是对名字长度的限制
判断
if (age >= 1 && age <= 120) {
this.age = age;
} else {
System.out.println("你设置的年龄不对,需要在1-120.给默认年龄18");
this.age = 18;//给一个默认年龄
}
对传入的年龄进行限制
getXxx
年龄和工资不是随便人都可以查看
public int getAge() {
return age;
}
public double getSalary() {
// 可以增加对当前对象的权限判断
return salary;
}
可以在年龄返回之前,对其进行限制,需要一定的权限才能进行查看。
getXxx:在返回的时候进行限制。
setXxx :在传入的时候对其进行限制。