人人都会错过,人人都曾经错过,真正属于你的,永远不会错过。
1.封装概述
封装就是利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。
2.封装的好处
- 减少耦合,可以独立地开发、测试、优化、使用、理解和修改
- 易于维护和修改
- 提高了复用性
- 隐藏实现细节,更加安全
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if (age < 0 || age > 200) {
throw new IllegalArgumentException();
}
this.age = age;
}
public void work() {
if (18 <= age && age <= 50) {
System.out.println(name + " is working very hard!");
} else {
System.out.println(name + " can't work any more!");
}
}
}
以Person 为例,用户不可直接访问Person 中的属性,但是可以通过getter方法获取相应的数据,通过setter设置属性,在setter中用相应的逻辑防止用户输入非法数据。
该例中,外界只能通过 getter 方法获取一个 Person 对象的 name 属性,而无法获取 age 属性,但是 age 属性可以供 work() 方法使用,保护了数据安全性,隐藏了实现细节。