Я работаю с классом 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;
}
Вот сбора данных часть моего кода: (EDIT: обновлен = к == в то время как петля)
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 с самим объектом. Кто-нибудь знает, как я могу это сделать? Спасибо за помощь.
Не должен 'while (loop = true)' be 'while (loop)' (без возможного вредоносного назначения) или 'for (;;)' (простой бесконечный цикл)? – MikeCAT
Да, это была неосторожная ошибка с моей стороны, но она все еще не отвечает на больший вопрос. – mellerlite
Вам не нужно проверять 'instanceof SalariedEmployee' и т. Д.' Employees [index] .toString() 'и' ((SalariedEmployee) employees [index]). ToString() 'вызывает точно такой же метод. –