-
什么是封装
- 封装就是把抽象出的数据【==属性==】和对数据的操作【==方法==】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【==方法==】,才能对数据进行操作。
- 用来打比方的话就是电视的遥控器,你只能操作按键来进行对电视的指令,但是不知道内部
- 封装就是把抽象出的数据【==属性==】和对数据的操作【==方法==】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【==方法==】,才能对数据进行操作。
-
封装的理解和好处
- 隐藏实现细节 方法(链接数据库)(<-- 调用(传入参数)
- 可以对数据进行验证,保证安全合理
-
封装的实现步骤
-
将属性进行私有化private[不能直接修改属性]
-
提供一个公共的(public)set方法,用于对属性判断并赋值
-
public void setXxx(类型 参数名){ // Xxx表示某个属性 // 加入数据验证的业务逻辑 属性=参数名; }
-
提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getXxx(){ // 权限判断,Xxx某个属性 return xx; }
-
package Object;
// 不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认
// 年龄, 必须在1-120, 年龄, 工资不能直接查看, name 的长度在2-6 字符之间
public class encap1 {
public static void main(String[] args) {
Person person = new Person();
person.setName("Harry");
person.setAge(30);
person.setSalary(2000.1);
System.out.println(person.info());
}
}
class Person{
public String name;
private double Salary;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
if (name.length()>=2 && name.length()<=6){
this.name = name;
} else {
System.out.println("error name");
this.name = "worker";
}
}
public double getSalary() {
return Salary;
}
public void setSalary(double salary) {
Salary = salary;
}
public int getAge() {
if (age >=1 && age <= 120){
this.age = age;
} else {
System.out.println("wrong age");
this.age = 18;
}
return age;
}
public void setAge(int age) {
this.age = age;
}
public String info(){
return "information about name: " + name + " about age " + age + " sal "+ Salary;
}
}
- 如果我们直接使用构造器指定属性进去
- 那么就可以直接得到已经被保护的信息
- 解决方法
- 可以直接在构造器中set方法, 这样就可以防御了
-
创建程序,在其中定义两个类:Account 和AccountTest 类体会Java 的封装性。
-
Account 类要求具有属性:姓名(长度为2 位3 位或4 位)、余额(必须>20)、密码(必须是六位), 如果不满足,则给出提示信息,并给默认值(程序员自己定)通过setXxx 的方法给Account 的属性赋值。
-
在AccountTest 中测试
-
这里是Account类
package Object;
/*
* 创建程序,在其中定义两个类:Account 和AccountTest 类体会Java 的封装性。
* Account 类要求具有属性:姓名(长度为2 位3 位或4 位)、余额(必须>20)、
* 密码(必须是六位), 如果不满足,则给出提示信息,并给默认值(程序员自己定)
* 通过setXxx 的方法给Account 的属性赋值。
* 在AccountTest 中测试
*/
public class Account {
private String name;
private double money;
private int [] password;
private int errorValue;
public Account() {
}
public Account(String name, double money, int[] password) {
this.name = name;
this.money = money;
this.password = password;
this.errorValue = errorValue;
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length()>=2 && name.length() <=6){
this.name = name;
} else {
System.out.println("please re-make name");
this.name = "You-know-who";
errorValue++;
}
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
if (money <= 20){
System.out.println("You cannot make your money less");
this.money = 0;
errorValue++;
} else {
this.money = money;
}
}
public int[] getPassword() {
return password;
}
public void setPassword(int[] password) {
if (password.length == 6){
this.password = password;
}
else {
System.out.println("Please re-make password");
this.password = new int[]{0, 0, 0, 0, 0, 0};
errorValue++;
}
}
public int getErrorValue(int i) {
return errorValue;
}
public void setErrorValue(int errorValue) {
this.errorValue = errorValue;
}
public void show(){
System.out.println("Name= "+name);
if (errorValue>=1){
System.out.println("You cannot see the rest of things");
} else {
System.out.println("You can");
}
// 这里是是否查看密码
}
}
- 这里是test
package Object;
public class AccountTest {
public static void main(String[] args) {
Account account = new Account();
account.setName("Harry");
account.setMoney(100);
account.setPassword(new int[]{1, 1, 1, 1, 1, 1});
account.show();
}
}