我看到这个代码:接口的类的对象,铸造,异常
interface I{}
class A implements I{}
class B extends A{}
class C extends B{}
class ABC
{
public static void main(String args[])
{
A a=new A();
B b=new B();
a=(B)(I)b; //Line 1
b=(B)(I)a; //Line 2
a=(I)b; //Line 3
I i=(C)a; //Line 4
}
}
试图找出
- 到即有一个安全的铸造哪种方式,而不编译或运行时错误
- 在什么情况下铸件会显示编译时错误
- 在什么情况下铸件会显示运行时异常
任何人都可以解释我这3个概念吗?
三年线,它不是*投*引起编译时失败 - 它试图为'A'类型的变量赋予一个编译时类型'I'的值... – 2014-11-06 19:20:50
在第二行中,你有一个不是'B'的对象,并且你试图将其分配给“B”类型的变量。为什么在运行时会这样? – 2014-11-06 19:22:30
因为我们把它铸造成B @ david – Gpar 2014-11-06 19:26:01