私は継承とポリモーフィズムに取り組んでいる小さなプロジェクトを持っています。Hourly と Salary の両方の従業員オブジェクトを含む Employee 型の ArrayList があります。calcPay
タイプ Employee の ArrayList 内のオブジェクトが Hourly 従業員である場合、for ループを使用して Hourly クラスの関数を呼び出せるようにしたいと考えています。この線
System.out.println("Wage: " e.calcPay());
エラーが発生しますThe method calcPay() is undefined for type employee
。オブジェクトをどのようにダウンキャストしますか? 私は多くのフォーラムを調べましたが、インラインで、または従業員のすべての子クラスに含める必要がある抽象メソッドを記述せずに実行できるオプションが見つかりませんでした。どんな洞察も大歓迎です。
public class Driver {
public static void main(String[] args) {
ArrayList<Employee> list = new ArrayList<Employee>();
Employee emp1 = new Hourly("Hourly Emp", "123 E Center", "555-555-5555", 00001, "123-45-6789", 12.75);
Employee emp2 = new Salary("Salary Emp", "123 E Center", "555-555-5555", 00001, "123-45-6789");
list.add(emp1);
list.add(emp2);
for(Employee e : list){
if(e instanceof Hourly)
{
System.out.println("Wage: " e.calcPay());
}
}
}
public abstract class Employee {
private String name, address, phone, ssn;
private int empNo;
Employee(String name, String address, String phone, int empNo, String ssn)
{
this.name = name;
this.address = address;
this.phone = phone;
this.empNo = empNo;
this.ssn = ssn;
}
}
public class Hourly extends Employee {
private double wage;
Hourly(String name, String address, String phone, int empNo, String ssn, double wage)
{
super(name, address, phone, empNo, ssn);
this.wage = wage;
}
public double calcPay(double hours)
{
return wage * hours;
}
}