我正在为即将到来的 Java 期末考试尝试一些练习考试,我遇到了这个问题。
考虑以下类定义并指出“Test.main()”是否会成功编译。如果它确实编译,表明它是否会成功运行,如果没有,表明会抛出什么异常。
public class A {
public int method(int[] a) {...}
}
public class B extends A {
@Override
public int method(int[] a) {...}
}
public class C extends B {
@Override
public int method(int[] a) {...}
public void otherMethod() {...}
}
public class Test {
public static void main(String[] args) {
A a = new C();
B b = new B();
b = (B) a;
}
}
我认为 Test.main() 会编译但会抛出运行时异常,因为 a 是实际的 C 类型,我们正试图将其转换为 B 类型。事实并非如此,因为答案说这很好。
我对铸造规则感到非常困惑,其中涉及的层次结构比 2 级更深。演讲幻灯片并没有这种信息!
那么,如果考试中出现此类问题,需要牢记哪些严格的“规则”?