我有以下代码:
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
会不会被视为上流? 最佳答案
如果将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/