继承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型,这将是向下投射。我读错代码了吗
# 1 楼答案
这是向上转换,因为您有一个类型Y的实例,它被类型X的变量引用,而X在类层次结构中是“向上的”
# 2 楼答案
当类型为
Y
或Z
(子类)的实例被视为基类型(超类)X
时,这是一个向上转换向上转换是隐式的(隐藏的),会导致派生类型被视为超级类型
这是一个向上投射的例子:
演员阵容含蓄(隐藏),但可以被认为是:
向下转换是从超级类型到派生类型。因此,要将
x1
向下转换为Y
类型:降级不是隐式的,必须显式声明。如果我们正在转换的实例不是我们正在转换的类型,那么它们可能会产生
ClassCastException