У меня есть следующий код
class X{}
class Y extends X{}
class Z extends X{}
public class RunTimeCastDemo{
public static void main(String args[]){
X x = new X();
Y y = new Y();
Z z = new Z();
X x1 = y; // compiles ok (y is subclass of X), upcast
X x2 = z; // compiles ok (z is subclass of X), upcast
Этот код был приведен мне на лекции. Я знаю, что X является базовым классом как Y, так и Z. x является ссылкой на объект типа X, y является ссылкой на объект типа Y, а z является ссылкой на объект типа Z. Часть, которая меня путает, - это две последние строки кода. По моему мнению, эталон x1 типа X присваивается той же ссылке, что и y, которая является типом Y. Так как x1 присваивается той же ссылке, что и y, это означает, что она идет от типа X к Y, который будет downcasting. Я читаю код неправильно?