Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用多态性创建arraylist?_Java_Arraylist - Fatal编程技术网

Java 如何使用多态性创建arraylist?

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 ="";

我正在尝试创建一个数组列表,其中包含所有员工,并且能够处理任何类型的员工。我还必须将数据加载到列表中,我使用的类称为payroll。这就是我到目前为止所做的:

employee类如下所示:

 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());时,它得到一个语法错误,表示“找不到符号”