Java 如何使用多态性创建arraylist?
我正在尝试创建一个数组列表,其中包含所有员工,并且能够处理任何类型的员工。我还必须将数据加载到列表中,我使用的类称为payroll。这就是我到目前为止所做的: employee类如下所示:Java 如何使用多态性创建arraylist?,java,arraylist,Java,Arraylist,我正在尝试创建一个数组列表,其中包含所有员工,并且能够处理任何类型的员工。我还必须将数据加载到列表中,我使用的类称为payroll。这就是我到目前为止所做的: employee类如下所示: import java.util.*; public abstract class Employee { private String name, employeeNum, department; private char type; public Employee() { name ="";
import java.util.*;
public abstract class Employee
{
private String name, employeeNum, department;
private char type;
public Employee()
{
name ="";
employeeNum = "";
department = "";
}
public Employee(String Name, String EmpNum, String Depart)
{
name = Name;
employeeNum = EmpNum;
department = Depart;
}
//public EMpoy
public String getName()
{
return name;
}
public String getEmployeeNum()
{
return employeeNum;
}
public String getDepartment()
{
return department;
}
public char getType()
{
return type;
}
public void setName(String Name)
{
name = Name;
}
public void setEmployeeNum(String EmpNum)
{
employeeNum = EmpNum;
}
public void setDepartment(String Depart)
{
department = Depart;
}
public String toString()
{
String str;
str = "Employee Name: " + name + "\n"
+ "Employee Number: " + employeeNum + "\n"
+ "Employee Department: " + department + "\n";
return str;
}
}
到目前为止,payroll类如下所示:
import java.util.*;
import java.io.*;
public class Payroll
{
private ArrayList<Employee> list = new ArrayList<Employee>();
private String fileName;
public Payroll()
{
}
public void fileName(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.println("InsertFileName");
String fileName1 = kb.next();
fileName = fileName1 + ".txt";
}
public void loadData() throws FileNotFoundException
{
Scanner s = new Scanner(new File(fileName));
while (s.hasNext())
{
String name = s.next();
String employeeNum = s.next();
String department = s.next();
//String typeString = s.next();
//char type = typeString.toUpperCase().charAt(0);
char type = s.next().toUpperCase().charAt(0);
if (type == 'S')
{
double yearlySalary = s.nextDouble();
list.add(new Salary (name, employeeNum, department, yearlySalary));
}
else if (type == 'H')
{
double hourlyPayRate = s.nextDouble();
String hours = s.next();
int hoursWorked = Integer.parseInt(hours);
list.add(new Hourly (name, employeeNum, department, hourlyPayRate, hoursWorked));
}
else if (type == 'C')
{
int numOfWeeks = s.nextInt();
double baseWeeklySalary = s.nextDouble();
int salesThisWeek = s.nextInt();
int salesThisYear = s.nextInt();
double commissionRate = s.nextDouble();
list.add(new Commission (name, employeeNum, department, numOfWeeks, baseWeeklySalary, salesThisWeek, salesThisYear, commissionRate));
}
}
s.close();
}
import java.util.*;
导入java.io.*;
公共类工资单
{
private ArrayList list=new ArrayList();
私有字符串文件名;
公共薪金总额()
{
}
公共无效文件名(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
System.out.println(“InsertFileName”);
字符串fileName1=kb.next();
fileName=fileName1+“.txt”;
}
public void loadData()引发FileNotFoundException
{
扫描仪s=新扫描仪(新文件(文件名));
而(s.hasNext())
{
字符串名称=s.next();
字符串employeeNum=s.next();
字符串department=s.next();
//String typeString=s.next();
//char type=typeString.toUpperCase().charAt(0);
char type=s.next().toUpperCase().charAt(0);
如果(类型=='S')
{
双年度平均值=s.nextDouble();
增加(新工资(姓名、雇员、部门、年薪));
}
else if(类型='H')
{
双小时支付率=s.nextDouble();
字符串hours=s.next();
int hoursWorked=Integer.parseInt(小时);
列表。添加(新的小时工资(姓名、雇员人数、部门、小时工资率、工作小时数));
}
else if(type='C')
{
int numOfWeeks=s.nextInt();
双基WeeklySalary=s.nextDouble();
int sales thisweek=s.nextInt();
int sales thistyear=s.nextInt();
双重佣金率=s.nextDouble();
添加(新佣金(姓名、员工人数、部门、周数、基本周收入、本周销售额、本年销售额、佣金率));
}
}
s、 close();
}
现在我知道我应该在构造函数中创建arraylist,这正是我遇到的问题。我如何使用多态性来创建列表以获取每个员工?谢谢。您好Srk93,您的列表包含employee类的引用,而employee类没有getCommissionRate方法。您可以调用employee在Employee类中声明的oyee引用。创建calculateSalary()的Abstract方法并在所有子类中实现
很抱歉,什么是
工资
、小时工资
和佣金
?这些都是员工的类型。如果你应该在构造函数中创建arraylist,为什么不这样做?换句话说,这个代码有什么问题?我看不出问题——你似乎正确使用了列表。我有什么不起作用吗?很抱歉,我不清楚。将数据加载到数组列表中时实际上有一个错误。问题是加载arraylist的每一个元素。我得到的语法错误之一是在编写list.get(0.getCommissionRate());时,它得到一个语法错误,表示“找不到符号”