在阅读Android Fragment Callback接口时,我注意到有可能将Parent
类对象转换为其子类体中定义的Interface
,而不会出现错误甚至编译器发出警告。如果Parent
类实现Interface
以防止这种类型的转换,那么编译时信息不是那种情况吗?这是显示我的意思的代码:
class Parent {}
public class Child extends Parent {
private InterfaceInChild iface;
public interface InterfaceInChild {
void foo();
}
public void checkCasting(Parent parent) {
iface = (InterfaceInChild) parent; // no warning, no error
}
public static void main(String[] args) {
Child c = new Child();
c.checkCasting(new Parent()); // throws exception
}
}
这是运行该代码时抛出的异常:
Exception in thread "main" java.lang.ClassCastException: Parent cannot be cast to Child$InterfaceInChild
at Child.checkCasting(Child.java:13)
at Child.main(Child.java:18)
PS。当然,它不是Android回调接口中使用的代码,我更改了类或方法的名称,并删除了没有必要清楚什么是重要的。