【Java】抽象类案例

需求:加入我们在开发一个系统时 需要对员工(Employee)类进行设计,员工包含3个属性:姓名、工号(number)以及工资(salary)。

  • 经理(Manager)也是员工,除了含有员工的属性外,另外还有一个奖金(bonus)属性。
  • headman(组长)也是员工
  • 然后定义工作的方法

请使用继承的思想设计出员工类和经理类。

 程序代码分析:(画图分析)

  • 员工——(非常抽象)
  • 员工——角色 项目经理角色、项目组长的角色、财务角色
  • 项目经理角色——管理整个项目 包括 安排项目任务
  • 项目组长的角色——带领团队开发任务 管理小团队

【Java】抽象类案例_第1张图片 案例代码:

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());
    }
}

运行结果:

【Java】抽象类案例_第2张图片


下一篇文章:abstract 关键字不能和哪些关键字共存

你可能感兴趣的:(java,开发语言,继承,多态,抽象类,封装)