在类层次结构中向下转换与向上转换

时间:2015-04-18 01:29:22

标签: java inheritance casting

我有以下代码:

public static void main (String[] args) {
    Parent p = new Child();
    Child c = null;
    Grandchild g = null;


    p = c; // upcast
    c = (Child) p; // downcast
    c = (Grandchild) p; // downcast ?

}

其中GrandchildChild的子版,ChildParent的子版。

我知道p=c是一个向上倾向,c = (Child) p;是一个合法的向下倾斜,到目前为止。现在,我的问题是,c = (Grandchild) p;是什么? 我对于如何将p向下传播到Grandchild感到困惑。但是,如果c属于Child类型,那么如果c = (Grandchild) p;类是Grandchild的子类型,则不会将Child视为上传?

1 个答案:

答案 0 :(得分:2)

如果c = (Grandchild) p;ClassCastException实例化,则

p会产生Child(如您的示例所示)。所以,它既不是演员也不是垂头丧气。示例:

Parent p = new Child();
GrandChild g;
g = (GrandChild)p;

将导致

Exception in thread "main" java.lang.ClassCastException: test.Child cannot be cast to test.GrandChild
    at test.Test.main(Test.java:18)
Java Result: 1

要使其有效,您必须将p实例化为GrandChild

Parent p = new GrandChild();
GrandChild g;
g = (GrandChild)p;