3
我想了解java编译器如何工作有关类型铸造,但我无法弄清楚。两个大概不相关的类之间的Java铸造
,请参见下面的代码
public class SampleTester{
public static interface A1{}
public static class A2{}
public static class A3 extends A2 implements A1{
public static void main(String[] args){
List<A1> test = new ArrayList<>();
test.add(new A3());
A2 a2 = (A2) test.get(0);
}
}
}
这段代码编译,但如果我改变
A2 a2 = (A2) test.get(0);
到
A2 a2 = (Integer) test.get(0);
它提供了编译错误。
类型不匹配:因为我看到它不能从整数转换到SampleTester.A2
,A2是不相关的A1以任何方式(完全按整数是没有关系的),因此如何投来的作品?
很好的答案,谢谢。在你回答之后,我意识到,即使在采用“扩展A2”之后,它也会编译,意思是(如果我错了,就纠正我),编译器不需要看到真正的层次结构连接,只是潜在的一个。 – DsCpp
@DsCpp这是正确的。 – Eran