我有以下代码:

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会不会被视为上流?

最佳答案

如果将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;

关于java - 类层次结构中的向下转换与向上转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29711879/

10-10 19:36