从EmployeeTest深入理解类对象和构造器

package javalearning;

import java.time.LocalDate;

public class EmployeeTest {

	public static void main(String[] args) {
		
		//使用new操作符构造Employee[]数组对象。staff这个 对象变量必须使用构造器初始化后才能使用
		//也就是Employee存放在堆中,而staff这个对象变量引用存放在栈中,=的意思是将对象变量staff指定的地址和Employee对象绑定在一起
		Employee[] staff = new Employee[3];
		
		
		//对数组对象进行实例化
		//对于每个特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态 ( state )
		staff[0] = new Employee("lili", 700, 1993, 12, 15);
		/*例如:使用上面这句new Employee("lili", 700, 1993, 12, 15);
		 * 会将实例域(对象中的数据)设置为
		 *  name = "lili"; 
		 *  salary = 700; 
		 *  hireDay = LocalDate.of(1993,12, 15);
		 */
		staff[1] = new Employee("max", 100, 1998, 12, 15);
		staff[2] = new Employee("jiating", 750, 1987, 12, 15);
		
		//对对象调用方法改变其行为(behavior),如果不调用方法,对象的状态是不会改变的
		for (Employee e : staff)
			e.raiseSalary(5);
		
		for (Employee e : staff)
			System.out.println("name=" + e.getName() + ",salary=" + e.getsalary() + ", hireDay=" + e.gethireDay());
	}
}

class Employee {
	
	// 3个实例域用来存放将要--操作的数据--,对象中的数据称为实例域( instance field ), 操纵数据的过程称为方法( method )
	//关键字 private 确保只有 Employee 类自身的方法能够访问这些实例域
	//为什么不能不使用public申明实例域呢?这是因为public数据域允许程序中的任何方法对其进行读取和修改。 这就完全破坏了封装。
	private String name;
	private double salary;
	private LocalDate hireDay;

	// 父类构造器
	public Employee(String n, double s, int year, int month, int day) {

		name = n;
		salary = s;
		hireDay = LocalDate.of(year, month, day);
	}

	/*
	 * name 是一个只读域。一旦在构造器中设置完毕, 就没有任何一个办法可以对 它进行修改,这样来确保 name 域不会受到外界的破坏。
	 */
	public String getName() {
		return name;

	}
	
	//虽然 salary 不是只读域,但是它只能用 raiseSalary 方法修改
	public double getsalary() {
		return salary;
	}

	public LocalDate gethireDay() {
		return hireDay;
	}
	
	//将调用这个方法的对象的salary实例域设置为新值,新值为通过该方法得到的salary值
	//raiseSalary方法中有两个参数
	//第一个为隐式参数,是出现在方法名前实例域salary;一般使用this.salary来区分实例域和局部变量raise
	//第二个为显示参数,位于方法名后面括号中的数值double byPrecent,即后者出现在方法的声明中
	
	public void raiseSalary(double byPercent) {
		
		double raise = this.salary * byPercent / 100;
		this.salary += raise;
	}

}


  class Manger extends Employee{
  
	//子类构造器
  public Manger(String n, double s, int year, int month, int day) { 
	  super(n, s,year, month, day);
  
  }
  
  }
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值