Java---对象与类(3)

警告:不要编写返回引用可变对象的访问器方法如下:

  private Date hireDay;

   

	public Date getHireDay() {
		return hireDay;
	}
	public void setHireDay(Date hireDay) {
		this.hireDay = hireDay;
	}

Date类有一个更改器方法setTime,Date对象是可变的,这点破坏了封装性

出错的原因很微妙。date和harry.hireDay引用同一个对象。对date调用更改器方法就可以自动的改变这个人的私有状态

看图

基于类的访问权限

从前面已经知道方法可以访问调用对象的私有数据。

看下面一个例子

package classLearn;

import java.time.LocalDate;

public class Employee {
	
	private String name;
	private double salary;
	private LocalDate hireDay;
	private int age;
	
	Employee(String n, double s, int year, int month, int day){
		
		this.name = n;
		this.salary = s;
		this.hireDay = LocalDate.of(year, month, day);
	}
	
	Employee(String n, double s, int year, int month, String day){
		
		
	}
	
	Employee(){
		
		
	}
	
	Employee(String n){
		
		
	}

	public String getName() {
		return "青城博雅职工:" + name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	public LocalDate getHireDay() {
		return hireDay;
	}

	public void setHireDay(LocalDate hireDay) {
		this.hireDay = hireDay;
	}

	@Override
	public String toString() {
		return "Employee [name=" + name + ", salary=" + salary + ", hireDay=" + hireDay + "]";
	}
	
	
	
	public int getAge() {
		
		return age;
	}

	public void setAge(int age) {
		
		if(age < 0) {
			
			age = 0;
		}
		this.age = age;
	}

	public void addSalary(int addPart) {
		
		salary = getNewSalary(addPart);
	}
	
	
	private double getNewSalary(int addPart) {
		
		return salary * (100 + addPart)/100;
	}
	
	
	/*
	 * 包含类可以直接访问私有域
	 */
	public boolean equels(Employee ee) {
		
		return name.equals(ee.name);
	}
	

}

这个例子说明一个方法可以访问所属类的所有对象


猜你喜欢

转载自blog.csdn.net/qq_33188563/article/details/81036491