我有以下代码
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,这将是向下转换.我读错了代码吗?
你的类层次结构
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)
你要分配y给x1.您将类型Y的引用分配给类型的引用X.看看层次结构,你就会向上发展upcast.