2016-03-15 126 views
0

我正在使用一个名为Employee的类和两个名为SalariedEmployee和HourlyEmployee的子类。在我的代码的这部分中,我试图测试一个数组中的Employee是SalariedEmployee还是HourlyEmployee。但是,它仅从最初的Employee类打印属性,而不是从子类打印。instanceof数组Java

case 2: { 
    for(int index = 0; index < employees.length; index++) { 
      System.out.println(employees[index] + "\n"); 
      if(employees[index] instanceof SalariedEmployee) { 
       SalariedEmployee aSalariedEmployee = (SalariedEmployee) employees[index]; 
       System.out.println(aSalariedEmployee.toString()); 
      } 
      else if(employees[index] instanceof HourlyEmployee) { 
       HourlyEmployee anHourlyEmployee = (HourlyEmployee) employees[index]; 
       System.out.println(anHourlyEmployee.toString()); 
      } 
      else { 
       System.out.println(" "); 
      } 
     } 
     System.out.println(" "); 
     break; 
} 

这里是我的代码数据收集部分:(编辑:更新= = =要在while循环)

int typeEmployee; 
boolean loop = true; 
OUTER: 
while (loop == true) { 
    System.out.print("Enter 1 if the Employee is Salaried, 2 if Hourly: "); 
    typeEmployee = info.nextInt(); 
     switch (typeEmployee) { 
      case 1: 
       System.out.print("Enter the Employee's Salary (with no commas): "); 
       float annSalary = info.nextFloat(); 
       SalariedEmployee aSalariedEmployee = new SalariedEmployee(annSalary); 
       aSalariedEmployee.setAnnualSalary(annSalary); 
       break OUTER; 
      case 2: 
       System.out.print("Enter the Employee's Hourly Pay Rate: "); 
       float hPRate = info.nextFloat(); 
       System.out.print("Enter the number of Hours Worked in a week: "); 
       float hWorked = info.nextFloat(); 
       HourlyEmployee anHourlyEmployee = new HourlyEmployee(hPRate, hWorked); 
       anHourlyEmployee.setHourlyPayRate(hPRate); 
       anHourlyEmployee.setHoursWorked(hWorked); 
       break OUTER; 
      default: 
       System.out.println("Invalid Option."); 
       break; 
     } 
} 

我觉得像什么,我在这里失踪的,我需要以某种方式将typeEmployee与对象本身关联起来。有谁知道我该怎么做? 感谢您的帮助。

+2

不应该'while(loop = true)'是'while(循环)'(没有可能有害的赋值)或'for(;;)'(简单的无限循环)? – MikeCAT

+0

是的,这是我的一个粗心的错误,但它仍然不能回答更大的问题。 – mellerlite

+0

您不需要检查'instanceof SalariedEmployee'等雇员[index] .toString()'和'((SalariedEmployee)employees [index]).toString()'调用完全相同的方法。 –

回答

2

它只是从原来的员工一流的印刷属性, 不从子类。

您需要在子类中覆盖toString()以包含新属性。

+0

如果这就是你所需要的,那么你不需要执行'instanceof'并投射。如果员工实例知道如何打印自己,则调用方法不需要进行区分。多态性之美。 – Thilo

+0

@Thilo我已经在子类中的toString方法之前添加了Override,它仍然不起作用。 – mellerlite

+0

请在问题中包含所有'toString'方法的实现。 – Thilo