Java Upcast与Downcast

use*_*186 11 java inheritance

我有以下代码

    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 
Run Code Online (Sandbox Code Playgroud)

上面的代码是在演讲中给我的.我知道X是Y和Z的基类.x是对X类型对象的引用,y是对Y类型对象的引用,z是对Z类型对象的引用.令我困惑的部分是代码的最后两行.根据我的理解,类型X的引用x1被赋予与y类型Y相同的引用.由于x1被赋予与y相同的引用,这意味着它从类型X转到Y,这将是向下转换.我读错了代码吗?

Sot*_*lis 8

你的类层次结构

Object
  |
  X
 / \
Y   Z
Run Code Online (Sandbox Code Playgroud)

根据我的理解,类型X的引用x1被赋予与y类型Y相同的引用.由于x1被赋予与y相同的引用,这意味着它从类型X转到Y,这将是向下转换.我读错了代码吗?

X x1 = y; // compiles ok (y is subclass of X), upcast 
Run Code Online (Sandbox Code Playgroud)

你要分配yx1.您将类型Y的引用分配给类型的引用X.看看层次结构,你就会向上发展upcast.