В следующем коде:
A tat = new P();
P bat = (P) tat;
является typecasting tat
: P bat = (P) tat;
то же самое: P tat = new P();
Можете ли вы также сказать в теории, что: P bat = ( P tat = new P(); )
Ответ да, но P bat = ( P tat = new P(); )
недействителен код Java и не компилируется.
Вы должны определить их, используя два оператора:
P bat, tat;
bat = tat = new P();
P bat, tat = bat = new P();
В вашем примере вам нужно иметь в виду, что, хотя tat
действительно является экземпляром P
, он имеет интерфейс, определенный A
(предполагая, что P
расширяет или реализует A
, иначе это не сработало).
После этого bat
будет ссылкой на тот же объект, на который ссылается tat
, однако он будет доступен через интерфейс, определенный P
tat
будет определенноP
вместо предположительно более общегоA
bat
будетP
в обоих случаях. Вам не нужно будет опускать руки, чтобы назначитьtat
bat
.