有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

继承Java向上与向下

我有以下代码

    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类型对象的引用。让我困惑的是代码的最后两行。根据我的理解,X型的参考x1被指定为与y型相同的参考。因为x1被指定为与y型相同的参考,这意味着它从X型转到y型,这将是向下投射。我读错代码了吗


共 (2) 个答案

  1. # 1 楼答案

    这是向上转换,因为您有一个类型Y的实例,它被类型X的变量引用,而X在类层次结构中是“向上的”

  2. # 2 楼答案

    当类型为YZ(子类)的实例被视为基类型(超类)X时,这是一个向上转换

    向上转换是隐式的(隐藏的),会导致派生类型被视为超级类型

    这是一个向上投射的例子:

    X x1 = y;
    

    演员阵容含蓄(隐藏),但可以被认为是:

    X x1 = (X) y;
    

    向下转换是从超级类型到派生类型。因此,要将x1向下转换为Y类型:

    X x1 = y;
    Y y1 = (Y) x1;
    

    降级不是隐式的,必须显式声明。如果我们正在转换的实例不是我们正在转换的类型,那么它们可能会产生ClassCastException