Temat rzutowania jest dla mnie oczywisty, jeśli chodzi o typy podstawowe. Np. rzutowanie z typu double do int (tracimy część ułamkową).
Natomiast pogubiłem się w przypadku rzutowania pomiędzy typami obiektów (nadklasy, podklasy itp.)
Przykład z książki, którą obecnie studiuję:
Manager boss = new Manager(...); //tworzony jest boss typu kierownika
Employee[] staff = new Employee[3]; //tworzona jest tablica zespołu składającego się z trzech pracowników
staff[0] = boss; //tutaj typ kierownika wkładam do pierwszej szufladki tablicy o typie pracownika (mogę, bo kierownik jest też jednocześnie pracownikiem
Zakładamy, że pozostałe dwie szufladki będą przechowywały obiekty typu pracownik (Emloyee).
No i teraz w dalszej części książki, przy okazji rzutowania:
Manager boss = (Manager) staff[1]; //Błąd
Manager boss = (Manager) staff[0]; //tak być może
Manager jest podklasą klasy Employee. Czemu więc to na czerwono jest błędne? W staff[1] trzymany jest obiekt typu Employee i samo staff[1] jest referencją do typu Employee. Nie można tak robić, bo pracownik nie może być zrzutowany na kierownika? Trochę tu się pogubiłem. Niby to potrafię opisać jak wyżej, ale nie czuję tego.
Tak samo jak z tym przykładem:
Date c = (Date) staff[1];