Ale*_*lex 3 java compiler-errors runtimeexception
假设有2个班级.并Child扩展Parent.
public class Parent {}
Run Code Online (Sandbox Code Playgroud)
和
public class Child extends Parent {}
Run Code Online (Sandbox Code Playgroud)
我知道以下代码不正确:
Child obj = new Parent(); // causes java.lang.Error
Run Code Online (Sandbox Code Playgroud)
要么
Child obj = (Child) new Parent(); // causes java.lang.ClassCastException
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么我在第一种情况下得到编译错误,在第二种情况下得到运行时异常.毕竟,父母永远不能转换或投射到孩子身上.为什么在编译时没有检查第二种情况?
我会非常感谢一个明确而合理的想法!
Child obj = new Parent();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器会尝试检查(隐式转换)是否Parent可以将对象设置为Child引用,并且当此转换失败时,您将收到编译时错误.
Child obj = (Child) new Parent();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器会看到您显式地将Parent对象转换为Child,因此编译器会将其留给运行时来决定转换是否有效,在某种意义上,开发人员负责转换.因此,如果此转换失败,则会出现运行时错误.
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |