在Java中返回抽象类的子节点?

时间:2017-03-05 09:24:18

标签: java inheritance abstraction

我一直致力于员工管理计划,目前我有一个班级(HR),一个抽象的员工班,有2个子班级(经理和SalesPerson)。目前在HR功能中,我有一个函数应该返回一个依赖于用户输入的员工类型,但目前得到错误

incompatible types: unexpected return value

以下是其他类的代码。

HR(功能片段,而非全班)

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

员工类

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

Salesperson类(经理类是相同的,但在字符串jobTitle中有不同之处,以显示其经理)

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

2 个答案:

答案 0 :(得分:2)

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

请注意,createNewEmployee名称异常严重,创建暗示,然后将其命名为createEmployeenewEmployee(第一个是更常见的情况。)

答案 1 :(得分:0)

如果在返回新实例的其中一行中发生错误(例如return new Manager(...)),则可能表示预期作为返回值的Employee类与Employee类,由两个子类SalesPersonManager扩展。

如果Employee返回值与两个子类扩展的Employee类相同,请检查HR类中的导入。也许您导入的Employee类具有相同的名称,但来自不同的包。