关于封装:
想象一个管理来自一群人(例如,一些大公司或银行)的敏感数据的应用程序,我们可以编写以下类来说明我们如何处理这些信息。
public class Test {
public static void main(String args[]) {
CarbonBasedLifeform joeBloggs = new CarbonBasedLifeform("Joe Bloggs", "987-65-4320");
System.out.println(joeBloggs.name);
}
}
class CarbonBasedLifeform {
String name;
String SSN;
public CarbonBasedLifeform(String name, String SSN)
{
this.name = name;
this.SSN = SSN;
}
}
如果您运行此代码,您将创建一个名为“CarbonBasedLifeform”的类,并创建一个实例,Joe Bloggs,现在想象其他一些程序员正在向程序添加更多内容,他们开始弄乱这些数据,如果他们更改乔的社会安全号码?甚至他的名字?我们没有任何东西可以保护对类属性的访问,所以可以很容易地做到:
joeBloggs.SSN = "0987654321";
如果人们可以像这样修改彼此的文档并更改个人数据,那将是一个多么奇怪、令人不安的世界。Joe 是唯一可以通过官僚循环获取新文档的人,这些东西是私有的,这就是为什么向类属性添加修饰符以及控制对其值的访问的特殊方法是一种常见做法,即吸气剂和二传手:
class CarbonBasedLifeform {
private String name;
private String SSN;
public CarbonBasedLifeform(String name, String SSN) {
this.name = name;
this.SSN = SSN;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSSN() {
return this.SSN;
}
public void setSSN(String SSN) {
if(verifyRedTape())
this.SSN = SSN;
}
}
}
现在,其他类无法直接更改 Joe 的属性,因为属性被标记为private
,并且方法提供了一种机制来控制其他类如何与此数据交互,这就是所谓的封装,或者换句话说,不要触摸乔的私事!