簡體   English   中英

返回Java中抽象類的子級?

[英]Returning the child of an abstract class in Java?

我一直在開發一個用於員工管理的程序,目前我有一個班級(HR),一個抽象的Employee班級,有2個子班級(Manager和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";
    }
}

任何方法都應始終返回聲明的返回類型的值。 但是您的函數createNewEmployee存在一個不返回任何值的執行路徑,編譯器隨后嘗試發出簡單的返回,因為這與聲明的Employee類型不兼容。 例如,您可以在默認情況下添加return null

請注意, createNewEmployee名稱異常錯誤, create暗示new ,然后將其命名為createEmployeenewEmployee (第一種是更常見的情況)。

如果在返回一個新的實例的線路之一發生錯誤(例如, return new Manager(...)這可能表明該Employee類預期的那樣返回值是不一樣的類型與Employee類,這是由SalesPersonManager的兩個子類擴展。

如果Employee返回值與兩個子類擴展的Employee類相同,請檢查HR類中的導入。 也許您從另一個包中導入了具有相同名稱的Employee類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM