欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

封装

程序员文章站 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里面的一个属性,这样是极大地不安全的,下面我们用图来解释一下。

 封装