0

TeamLeader または Engineer のいずれかのインスタンスに基づいてオブジェクトの配列の内容を印刷しようとすると、シンボルが見つからないというエラーが発生します。クラス固有のメソッドに到達すると、エラーがポップアップします。

getTeamSize()メソッドロケーション クラスが見つかりませんPerson

getTeamSizeTeamLeaderサブクラスからのものです。他のサブクラス固有のメソッドのメソッドとペアになった同じエラー。

次の 112 行目と 117 行目でエラーが発生しますSystem.out.printf()

try {
    in = new ObjectInputStream(new FileInputStream("persons.dat"));
    Person[] personList = new Person[3];
    for (int i = 0; i < personList.length; i++) {
        personList[i] = (Person) in.readObject();
    }
    System.out.printf("%-20s %3s %10s %10s", "Name", "Age", "Team Size", "Experience\n");
    for (int x = 0; x < personList.length; x++) {
        if (personList[x] instanceof TeamLeader) {
            System.out.printf("-20s %3i %10i %10s\n",
                              personList[x].getName(), personList[x].getAge(),
                              personList[x].getTeamSize(), " ");
        } else {
            System.out.printf("-20s %3i %10s %10.1f\n",
                              personList[x].getName(), personList[x].getAge(),
                              " ", personList[x].getExperience());
        }

    }
    System.out.println();
} catch (IOException e) {
    System.out.println("Problem reading file");
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    System.out.println("Could not find designated class");
    e.printStackTrace();
}
4

1 に答える 1

0

getTeamSize()メソッドはクラスにのみ存在し、TeamLeaderクラスには存在しないと思いますPerson。したがって、そのメソッドを使用できるようにするには、 Person を TeamLeader にキャストする必要があります。

if (personList[x] instanceof TeamLeader){
    TeamLeader teamLeader = (TeamLeader) personList[x];
    System.out.printf("-20s %3i %10i %10s\n",
        teamLeader.getName(), teamLeader.getAge(), 
        teamLeader.getTeamSize(), " ");
}
于 2013-04-12T11:18:56.320 に答える