【发布时间】:2017-02-13 13:00:38
【问题描述】:
我试图了解 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);
它给出了一个编译错误。
类型不匹配:无法从 Integer 转换为 SampleTester.A2
在我看来,A2 与 A1 没有任何关系(正如整数不相关),那么强制转换是如何工作的呢?
【问题讨论】: