在 Java 中返回摘要 class 的 child?

Returning the child of an abstract class in Java?

我一直在研究一个员工管理程序,目前我有一个 class (HR),一个抽象的员工 class,有 2 child classes(经理和销售人员)。目前在 HR 功能中,我有一个功能应该 return 一种依赖于用户输入的员工类型,但目前出现错误

incompatible types: unexpected return value

这是其他 classes.

的代码

HR(函数片段,而不是整个class)

public Employee createNewEmployee(int index)
{
    switch(index)
            {
                case 0:
                    idTracker++;
                    return new Manager(idTracker, nameField.getText(), Double.parseDouble(salaryField.getText()));
                    break;
                case 1:
                    idTracker++;
                    return new SalesPerson(idTracker, nameField.getText(), Double.parseDouble(salaryField.getText()));
                    break;
                default:
                    System.out.println("Didn't work");
            } 
}

员工class

public abstract class Employee
{
    protected double salary;
    protected String name;
    protected int IDNumber;
    protected String jobTitle;
    protected String dateEmployed;

    public Employee(int ID, String n, double s)
    {
        IDNumber = ID;
        setName(n);
        setSalary(s);
    }
}

和销售员class(经理class相同,但字符串jobTitle不同以显示其经理)

public class SalesPerson extends Employee
{
    public SalesPerson(int ID, String n, double s)
    {
        super(ID, n, s);
        jobTitle = "Sales Person";
    }
}

任何方法都应始终 return 声明的 return 类型的值。但是在你的函数 createNewEmployee 中存在一个不 return 任何值的执行路径,编译器然后尝试发出一个简单的 return,唉,这与声明的 Employee 类型。你可以在默认的情况下加一个return null,比如

注意 createNewEmployee 的命名异常糟糕,create 意味着 new,然后将其命名为 createEmployeenewEmployee(第一种情况比较常见)。

如果错误发生在 return 编辑新实例的行之一(例如 return new Manager(...)),它可能表明 Employee class 预期因为 return 值与 Employee class 的类型不同,后者由两个子 classes SalesPersonManager 扩展。

如果 Employee return 值与两个子 Employee class 扩展的值相同,请检查 HR class 中的导入=22=]es。也许您从不同的包中导入了同名的 Employee class。