Rzutowanie obiektów nie działa?

0

Czytam właśnie książkę o Javie, i próbuję swoich sił. Mam 4 klasy.
Nadklasa to Person. Podklasy to Employee co dziedziczy po Person, i Manager co dziedziczy po Employee.
Mam jeszcze klasę Employeetest.
a w niej taki kod

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package employee;

/**
 *
 * @author Mateusz
 */
public class Employeetest 
{
    public static void main(String[] args) 
    {
        
        //Manager boss = new Manager("Karol", "Parol", 75000);
        
        
        Person e[] = new Person[3];
        
        e[0] = new Employee("Damian", "Nowak", 40000);
        e[1] = new Employee("Karol", "Kowalski", 45000);
        e[2] = new Manager("Karol", "Parol", 75000, 25000);
        

        for(Person E : e)
        {
            if(E instanceof Manager)
            {
                Manager boss = (Manager) E;
                 System.out.println(boss.getImie() + " " + boss.getNazwisko()+" " + boss.getPensja() + " " + boss.getBonus()+ " " + boss.toString());
            }
            else
            System.out.println(E.getImie() + " " + E.getNazwisko() + " " + E.getPensja()+ " " + E.toString());
        }
        
        //Zgodnie z tym co pisze w książce poniższa peętla powinna dzialać
        //getBonus to metoda tylko w klasie Manager
        for(Person E : e)
        {
            if(E instanceof Manager)
            {
                 System.out.println(E.getImie() + " " + E.getNazwisko()+" " + E.getPensja() + " " + (Manager)E.getBonus()+ " " + E.toString());
            }
            else
            System.out.println(E.getImie() + " " + E.getNazwisko() + " " + E.getPensja()+ " " + E.toString());
        }
        
        
    }
}

Dlaczego pomimo rzutowania kompilator zgłasza błąd w drugiej pętli, przy wywołaniu metody getBonus?

 Cannot find symbol
symbol : getBonus()
location: variable E of type Person
 

Praktycznie taki sam przykład jest w książce.

0

Priorytety operatorów! Dodaj nawiasy.

A jeszcze lepiej zamiast stosować tego głupiego if-a to skorzystaj z polimorfizmu. Po to jest, by stosować go w takich wypadkach.
Aż się prosi by nadpisać metodę toString() dla obu klas.

0

No i już po problemie dziękuję.
Na razie jestem w fazie nauki i próbuję wszystkiego co jest w książce(if i instanceof)
A toString() mam tylko w klasie person, jako metodę finalną, bo chciałem zobaczyć jak metody finalne działają.

1 użytkowników online, w tym zalogowanych: 0, gości: 1