需求:加入我们在开发一个系统时 需要对员工(Employee)类进行设计,员工包含3个属性:姓名、工号(number)以及工资(salary)。
- 经理(Manager)也是员工,除了含有员工的属性外,另外还有一个奖金(bonus)属性。
- headman(组长)也是员工
- 然后定义工作的方法
请使用继承的思想设计出员工类和经理类。
程序代码分析:(画图分析)
- 员工——(非常抽象)
- 员工——角色 项目经理角色、项目组长的角色、财务角色
- 项目经理角色——管理整个项目 包括 安排项目任务
- 项目组长的角色——带领团队开发任务 管理小团队
案例代码:
EmployeeParent.java
package com.面向对象.Demo26;
/**
* 员工类
*/
public abstract class EmployeeParent {
public EmployeeParent() {
}
public EmployeeParent(String name, int number, Double salary) {
this.name = name;
this.number = number;
this.salary = salary;
}
private String name; //姓名
private int number; //工号
private Double salary; // 工资
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
/**
* 不同的员工 对应的工作任务 是不一样的 work() 抽象方法
* 需要交给 不同的子类来重写的
*/
public abstract void work();
}
Manager.java
package com.面向对象.Demo26;
/**
* 项目经理类
*/
public class Manager extends EmployeeParent {
private Double bonus; // 奖金
/**
* 在默认的情况下 是有一个无参构造方法的 默认 super(); 父类中无参构造方法的
*/
public Manager(String name, int number, Double salary, Double bonus) {
super(name, number, salary);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("项目经理Manager-管理整个项目");
}
public Double getBonus() {
return bonus;
}
}
Headman.java
package com.面向对象.Demo26;
/**
* 项目组长类
*/
public class Headman extends EmployeeParent {
public Headman(String name, int number, Double salary) {
super(name, number, salary);
}
@Override
public void work() {
System.out.println("项目组长Headman-负责带领小的团队编码工作");
}
}
Test01.java
package com.面向对象.Demo26;
public class Test01 {
public static void main(String[] args) {
EmployeeParent parent = new Manager("张三", 1, 20000.00, 2000.00);
parent.work();
System.out.println("员工姓名:" + parent.getName());
System.out.println("员工工号:" + parent.getNumber());
System.out.println("员工薪资:" + parent.getSalary());
// System.out.println("员工奖金:"+parent.bonus); //这样是访问不到的
/**
* 编译看左边 执行看右边
* 多态转型(向下转型)
* 父转子
*/
Manager manager = (Manager) parent;
System.out.println("项目经理奖金:" + manager.getBonus());
System.out.println("=============================");
Headman headman = new Headman("李四", 2, 10000.00);
headman.work();
System.out.println("员工姓名:" + headman.getName());
System.out.println("员工工号:" + headman.getNumber());
System.out.println("员工薪资:" + headman.getSalary());
}
}
运行结果:
下一篇文章: