• 【Java】抽象类案例


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

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

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

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

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

    案例代码:

    EmployeeParent.java

    1. package com.面向对象.Demo26;
    2. /**
    3. * 员工类
    4. */
    5. public abstract class EmployeeParent {
    6. public EmployeeParent() {
    7. }
    8. public EmployeeParent(String name, int number, Double salary) {
    9. this.name = name;
    10. this.number = number;
    11. this.salary = salary;
    12. }
    13. private String name; //姓名
    14. private int number; //工号
    15. private Double salary; // 工资
    16. public String getName() {
    17. return name;
    18. }
    19. public void setName(String name) {
    20. this.name = name;
    21. }
    22. public int getNumber() {
    23. return number;
    24. }
    25. public void setNumber(int number) {
    26. this.number = number;
    27. }
    28. public Double getSalary() {
    29. return salary;
    30. }
    31. public void setSalary(Double salary) {
    32. this.salary = salary;
    33. }
    34. /**
    35. * 不同的员工 对应的工作任务 是不一样的 work() 抽象方法
    36. * 需要交给 不同的子类来重写的
    37. */
    38. public abstract void work();
    39. }

    Manager.java

    1. package com.面向对象.Demo26;
    2. /**
    3. * 项目经理类
    4. */
    5. public class Manager extends EmployeeParent {
    6. private Double bonus; // 奖金
    7. /**
    8. * 在默认的情况下 是有一个无参构造方法的 默认 super(); 父类中无参构造方法的
    9. */
    10. public Manager(String name, int number, Double salary, Double bonus) {
    11. super(name, number, salary);
    12. this.bonus = bonus;
    13. }
    14. @Override
    15. public void work() {
    16. System.out.println("项目经理Manager-管理整个项目");
    17. }
    18. public Double getBonus() {
    19. return bonus;
    20. }
    21. }

    Headman.java

    1. package com.面向对象.Demo26;
    2. /**
    3. * 项目组长类
    4. */
    5. public class Headman extends EmployeeParent {
    6. public Headman(String name, int number, Double salary) {
    7. super(name, number, salary);
    8. }
    9. @Override
    10. public void work() {
    11. System.out.println("项目组长Headman-负责带领小的团队编码工作");
    12. }
    13. }

    Test01.java

    1. package com.面向对象.Demo26;
    2. public class Test01 {
    3. public static void main(String[] args) {
    4. EmployeeParent parent = new Manager("张三", 1, 20000.00, 2000.00);
    5. parent.work();
    6. System.out.println("员工姓名:" + parent.getName());
    7. System.out.println("员工工号:" + parent.getNumber());
    8. System.out.println("员工薪资:" + parent.getSalary());
    9. // System.out.println("员工奖金:"+parent.bonus); //这样是访问不到的
    10. /**
    11. * 编译看左边 执行看右边
    12. * 多态转型(向下转型)
    13. * 父转子
    14. */
    15. Manager manager = (Manager) parent;
    16. System.out.println("项目经理奖金:" + manager.getBonus());
    17. System.out.println("=============================");
    18. Headman headman = new Headman("李四", 2, 10000.00);
    19. headman.work();
    20. System.out.println("员工姓名:" + headman.getName());
    21. System.out.println("员工工号:" + headman.getNumber());
    22. System.out.println("员工薪资:" + headman.getSalary());
    23. }
    24. }

    运行结果:


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

  • 相关阅读:
    国产CI/CD工具Commander
    什么是JUC_java培训
    【计算机毕业设计】基于JAVA的在线租房网站系统源码
    C语言 | Leetcode C语言题解之第129题求根节点到叶节点数字之和
    单片机是不是嵌入式呢,老生常谈了
    红黑树详解
    Current request is not a multipart request 状态码:511 异常
    js 创建DOM,并添加父DOM上,移除某个DOM的所有子节点
    始祖双碳新闻 | 2022年8月19日碳中和行业早知道
    从20s优化到500ms,我用了这三招
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133578514