继承的基本演示

package org.pcl.shili.jicheng;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * 继承的基本演示
 * @author yifan
 * @version 1.1 2014-05-14
 * 
 * 1.演示了一个类如何继承另一个类: 使用extends关键字
 * 2.演示了super关键字的两个用法, 一个是调用构造器另一个调用父类方法
 * 3.演示了子类中使用父类的私有成员的方式:使用父类共有的方法
 * 4.对于成员是类类型,并且该类型具有修改其自身的方法时的使用方式见getHireDate方法
 * 5.演示了多态和动态绑定
 */
public class ManagerTest {

	public static void main(String[] args) {
		Employee[] employees = new Employee[3];
		employees[0] = new Manager("管理员", 8000, 2000, 12, 13, 10000); // 多态哦
		employees[1] = new Employee("员工1", 6000, 2008, 8, 8);
		employees[2] = new Employee("员工2", 3000, 2014, 5, 15);
		// 循环输出所有的职员信息
		for(Employee e : employees) {
			String name = e.getName();
			double salary = e.getSalary(); // 动态绑定
			GregorianCalendar hireDate = e.getHireDate();
			System.out.printf("员工姓名:%s, 员工工资:%.2f, 员工入职时间:%d年%d月%d日\n", name, salary, hireDate.get(Calendar.YEAR), hireDate.get(Calendar.MONTH)+1, hireDate.get(Calendar.DAY_OF_MONTH));
		}
	}

}

/**
 * 普通职员类
 * @author yifan
 * @version 1.1 2014-05-14
 */
class Employee {
	/**
	 * 构建一个新的职员
	 * @param name 姓名
	 * @param salary 工资
	 * @param year 入职年
	 * @param month 入职月
	 * @param day 入职日
	 */
	public Employee(String sName, double dSalary, int iYear, int iMonth, int iDay) {
		this.name = sName;
		this.salary = dSalary;
		this.hireDate = new GregorianCalendar(iYear, iMonth-1, iDay);
	}
	/**
	 * 获取职员姓名
	 * @return 职员的姓名
	 */
	public String getName() {
		return this.name;
	}
	/**
	 * 获取职员的工资
	 * @return 职员的工资
	 */
	public double getSalary() {
		return this.salary;
	}
	/**
	 * 获取入职时间的一个副本
	 * @return 入职的时间
	 */
	public GregorianCalendar getHireDate() {
		return (GregorianCalendar)  this.hireDate.clone();
	}
	/**
	 * 给职员增加工资
	 * @param byPercent 增加的系数
	 */
	public void raiseSalary(int byPercent) {
		this.salary += this.salary * byPercent/100;
	}
	private String name;
	private double salary;
	private GregorianCalendar hireDate;
}

/**
 * 管理员类,继承自普通员工类
 * @author yifan
 * @version 1.0 2014-05-14
 */
class Manager extends Employee {
	/**
	 * 构建一个新的管理员
	 * @param name 管理员的姓名
	 * @param salary 管理员的工资
	 * @param year 入职年
	 * @param month 入职月
	 * @param day 入职日
	 */
	public Manager(String name, double salary, int year, int month, int day) {
		super(name, salary, year, month, day);
		this.bonus = 0;
	}
	/**
	 * 构建一个新的管理员并设置管理员的奖金
	 * @param name 姓名
	 * @param salary 工资
	 * @param year 入职年
	 * @param month 入职月
	 * @param day 入职日
	 * @param dBanus 奖金
	 */
	public Manager(String name, double salary, int year, int month, int day, double dBaous) {
		super(name, salary, year, month, day);
		this.bonus = dBaous;
	}
	/**
	 * 设置该管理员的奖金
	 * @param dBonus 奖金
	 */
	public void setBanus(double dBonus) {
		this.bonus = dBonus;
	}
	/**
	 * 获取管理员的工资
	 * @return 管理员的工资
	 */
	@Override
	public double getSalary() {
		return super.getSalary() + this.bonus;
	}
	private double bonus;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值