我有以下代码:
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 ?
}
其中Grandchild
是Child
的子版,Child
是Parent
的子版。
我知道p=c
是一个向上倾向,c = (Child) p;
是一个合法的向下倾斜,到目前为止。现在,我的问题是,c = (Grandchild) p;
是什么?
我对于如何将p
向下传播到Grandchild
感到困惑。但是,如果c
属于Child类型,那么如果c = (Grandchild) p;
类是Grandchild
的子类型,则不会将Child
视为上传?
答案 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;