-1

我对类型转换做了一个简短的研究,下面是我的代码

interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}

public class Delta extends Beta
{
    public static void main( String[] args )
 {      
        Beta x = new Beta();         
         Alpha a = x;
            // Foo f = (Alpha)x;// --> commented out
         Beta b = (Beta)(Alpha)x;   
         Foo f = (Delta)x; //  --> complie time error   

    }

}

如上一条语句所示,它会引发运行时错误 java.lang.ClassCas tException,请告知,如果我使用 Alpha 投射它,那么它工作得非常好。

4

2 回答 2

4

您不能将变量向下转换为在类层次结构中比实际对象更深的类型。这是因为需要将一些属性添加到向下转换的变量中,并且不清楚它们的值应该是什么。

然而,在所有关于强制转换的检查中,真正重要的是被引用对象的实际类型,而不是当前声明的类型。例如,即使您有Alpha a = x;,这仍然可以向下转换为Beta,因为真实实例指向 的对象Beta

于 2012-05-01T05:41:47.920 回答
1

你不能Beta灰心丧气Delta

您所做的类似于实例化Animal(Beta)对象,然后将其向下转换为Animal(Beta)的子类,例如Dog(Delta)。这是非法的。

于 2012-05-01T05:41:32.963 回答