封装
程序员文章站
2022-05-15 19:21:20
...
我们先来看一下一些get方法:
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public LocalDate getHireDay() {
return hireDay;
}
这些都是典型的访问器方法,当然,也有更改器方法,如下 :
public void setName(String name) {
this.name = name;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void setHireDay(LocalDate hireDay) {
this.hireDay = hireDay;
}
这些方法有什么作用呢,他们可以保护程序的封装性。
有些时候,需要获得或设置实例域的值。因此,应该提供下面三项内容:
(1)一个私有的数据域
(2)一个公有的域访问器方法
(3)一个公有的域更改器方法。
这样虽然看起来很麻烦,但是相对比较安全,大致情况下,在除了使用实例化对象公开的更改属性的方法之外,不能使用任何的方式方法更改其属性的值。
用一个例子,就是任何人想要在你的本子上写东西必须用你提供的笔,不能出现一些人用其他的笔在你的本子上写东西。这样虽然程序不会报错,但是却大大的提高了程序的安全隐患。
接下来我们就举一个代码的例子:
就例如一个类中有这个方法:
public LocalDate getHireDay(){
return hireDay;
}
他的LocalDate返回类型就不能修改为Date,因为LoaclDate中内有任何的更改器方法,也就是set方法,但是Date就有。下面我们看这段代码。
public static void main(String[] args) {
Employee harry = new Employee("Carl Cracker", 75000, 100000);
System.out.println(harry.getHireDay().toString());
Date d = harry.getHireDay();
long ten = 2000000L;
d.setTime(ten);
System.out.println(harry.getHireDay().toString());
}
输出的结果为:
Thu Apr 14 19:06:23 CST 2292
Thu Jan 01 08:33:20 CST 1970
这样就没通过Employee A提供的set方法就更改了A里面的一个属性,这样是极大地不安全的,下面我们用图来解释一下。