[英]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 ,然后將其命名為createEmployee
或newEmployee
(第一種是更常見的情況)。
如果在返回一個新的實例的線路之一發生錯誤(例如, return new Manager(...)
這可能表明該Employee
類預期的那樣返回值是不一樣的類型與Employee
類,這是由SalesPerson
和Manager
的兩個子類擴展。
如果Employee
返回值與兩個子類擴展的Employee
類相同,請檢查HR類中的導入。 也許您從另一個包中導入了具有相同名稱的Employee
類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.