Witam
Mam mały problem ze zrozumieniem tego całego rzutowania w dół... w google za dużo o tym nie ma, książka Thinking in Java ujmuje to troche mało precyzyjnie ,a książka Marcina Lis-a... niby okej ale...
Mamy dwie klasy:
class Punkt
{
public int x;
public int y;
}
i dziedzicząca:
class Punkt3D extends Punkt
{
public int z;
}
oraz 2 klasy main:
Pierwsza(której próba uruchomienia oraz kompilacji nie przystwarza problemu):
class MainPunkt
{
public static void main (String [] args)
{
Punkt3D punkt3D1 = new Punkt3D();
punkt3D1.x = 10;
punkt3D1.y = 20;
punkt3D1.z = 30;
Punkt punkt = (Punkt) punkt3D1;
punkt.x = 40;
punkt.y = 50;
Punkt3D punkt3D2 = (Punkt3D) punkt;
punkt3D2.x = 70;
punkt3D2.y = 80;
punkt3D2.z = 90;
}
}
oraz druga (kompilująca się bez błędów, ale pokazująca wyjątek ClassCastException):
class MainPunkt
{
public static void main (String [] args)
{
Punkt punkt = new Punkt();
Punkt3D punkt3D = (Punkt3D) punkt;
punkt3D.z=10;
}
}
I moje pytanie czemu tak się dzieje i czym różni się rzutowanie tych samych klas:
W pierwszej main:
Punkt3D punkt3D2 = (Punkt3D) punkt;
W drugiej main:
Punkt3D punkt3D = (Punkt3D) punkt;
Z góry wielkie dzięki za odpowiedź i łopatologiczne wytłumaczenie tej sytuacji... [???]