自己检讨下:刚开始看这个的时候,我觉得挺简单的,但是让我自己写的时候我确实不会写,最大的缺点就是好高骛远,偷懒,基础不会就想着上天。
希望别的朋友别要有这样的想法,再简单的例子,如果你不亲自敲下,在揣摩下,你敢说日后让你写这样的代码,你能写出来吗,我不是天才,但我坚信勤奋可以造就天才。
首先:分析下员工与经理之间的相同点,就是员工与经理都有姓名,工资和日期(其实我感觉这个日期不必要有)这个三个属性,经理比员工多的就是经理又项目奖金
然后可以把相同的信息抽出来,实例一个Employee类 ,这个类中有L:姓名,工资和日期 这三个属性
普通员工类:
public class Employee {
private String name;
private double salary;
private Date hireDay;
public Employee(String name, double salary, int year, int month, int day) {
this.name = name;
this.salary = salary;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
}
经理类:
在这里经理的类里边就比员工的多了一个奖金字段,其他的都一样,所以必须有一个对应Employee的构造器,并且在计算工资的时候,把奖金加上去
这个类里边没有private double salary;这个属性,是因为Manager类使用到了extends这个关键字,继承了父类的属性和方法(除了private修改之外的所有)
public class Manager extends Employee {
public Manager(String name, double salary, int year, int month, int day) {
super(name, salary, year, month, day);
bonus = 0;
}
public double getSalary() {
// 这里使用super.getSalart()===〉如果去掉super的话,那么会一直调用本身,直到堆栈溢出
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
// 奖金
private double bonus;
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
测试类:
public class ManagerTest {
public static void main(String[] args) {
Manager boss = new Manager("LZ", 80000, 1990, 3, 15);
boss.setBonus(5000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("lz", 50000, 2014, 2, 23);
staff[2] = new Employee("lb", 40000, 2014, 1, 19);
for (Employee e : staff) {
System.out.println("name=" + e.getName() + ",salary="
+ e.getSalary());
}
}
}
结果:
name=LZ,salary=85000.0
name=lz,salary=50000.0
name=lb,salary=40000.0
注:这里边也涉及到了构造器的使用,大家先记着就是子类里边必须有对应父类构造器方法的参数存在,参数个数,以及参数类型
还有就是super的出现的时候,一般指的是调用父类的方法。