【问题标题】:Use inheritance as subcategory使用继承作为子类
【发布时间】:2022-11-23 20:01:29
【问题描述】:

假设我有一个父类 Employee 和三个子类:

  • Worker(具有 hourlySalary 属性)
  • PermanentEmployee(具有 monthlySalary 属性)
  • 经理(有月薪和佣金属性)

每个类别都有自己的月薪计算方法。

如果我想将 Worker“转换”为 Permanent Employee,如果两者都是自己的类并且继承自 Employee 类,那么最好的方法是什么。

我会实现一种覆盖或删除所需属性的方法,但这听起来很迂回。有没有更好的办法?最后我需要为我的学习项目使用继承。

【问题讨论】:

  • 似乎您正在为此研究策略模式而不是继承
  • “转换”是什么意思?从 Worker 实例创建一个 PermanentEmployee 实例?或者是其他东西?

标签: java inheritance casting


【解决方案1】:

为什么不在 Worker 中同时使用两种类型的工资字段,您可以将其中任何一个设置为 0?这样你就可以减少你需要的类的数量并简化你的逻辑。

对于我自己,我考虑如何在 (SQL) 数据库中对其进行建模,这就是我的做法。维护的类越多,项目需求变化时就越头疼

顺便说一句,在提交这个答案后,我将投票结束这个基于意见的问题。我认为这个问题可以有很多有效的答案

【讨论】:

    【解决方案2】:
    public abstract class Employee {
    
        // attribut definition
        private StringProperty firstname;
        private StringProperty lastname;
        private ObjectProperty<LocalDate> bday;
        private ObjectProperty<Gender> gender;
        private StringProperty jobTitle;
        private ObjectProperty<LocalDate> entryDate;
        private IntegerProperty workload;
    
        // attribute definition OOP2
        private IntegerProperty personnelnr;
        private StringProperty street;
        private StringProperty postCode;
        private StringProperty location;
        private StringProperty mail;
        private StringProperty phone;
        private StringProperty iban;
        private ObjectProperty<EmployeeCategory> employeeCategory;
    
    // Constructor.. Getters and Setters.. 
    }
    
    public class Manager extends Employee {
        // attribute definition
        private DoubleProperty monthlySalary;
        private DoubleProperty commission;
    
    
    // calculateMonthlySalary(){...};
    
    // Constructor.. Getters and Setters.. 
    }
    
    public class Worker extends Employee {
        
        // attribute definition
        private DoubleProperty hourlySalary;
    
    
    
    // calculateMonthlySalary(){...};
    
    // Constructor.. Getters and Setters.. 
    }
    
    public class PermanentEmployee extends Employee {
        // attribute definition
        private DoubleProperty monthlySalary;
    
    
    // calculateMonthlySalary(){...};
    
    // Constructor.. Getters and Setters.. 
    }
    

    【讨论】:

    • 这看起来不像是一个答案。您可以编辑您的问题以将此代码添加到其中。
    • 如果这是您问题的一部分,请将其编辑到您的问题中。
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2018-05-23
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多