11.classA {
12. public void process() { System.out.print(”A “); } }
13. class B extends A {
14. public void process() throws RuntimeException {
15. super.process();
16. if (true) throw new RuntimeException();
17. System.out.print(“B”); }}
18. public static void main(String[] args) {
19. try { ((A)new B()).process(); }
20. catch (Exception e) { System.out.print(”Exception “); }
21. }
What is the result?
A. Exception
B. A Exception
C. A Exception B
D. A B Exception
E. Compilation fails because of an error in line 14.
F. Compilation fails because of an error in line 19.
答案..,选择的原因

解决方案 »

  1.   

    选B。理由。try块里的方法执行时。执行new B().process();然后调用父类的方法。输出A。顺便抛出了异常,然后。catch捕获,输出Exception.顺便说下。17行是永远不会执行的。因为有16行抛出异常,已经终止方法执行了。
      

  2.   

    选B    main()中的new B()说明实际开辟的对象类型的B类型。虽然B类型也是A类型的,但是((A)new B()).process();调用的仍然是B类型的process方法(动态绑定机制)。而B的process()一定会抛出RuntimeException();异常,然后被main捕捉回来,打印Exception。程序结束。
      

  3.   


    也要打印A的。因为有super.process();