java的SCJP中的一道题

2024年11月18日 23:34
有2个网友回答
网友(1):

答案是F
因为没有捕捉异常,所以编译不通过
=================
为什么不是15行。
因为B继承自A,A是父类。
第18行创建一个A的实例,因为B继承自A,B可以向上转型为A,所以调用的自然是A的构造器。假设这里改为:A a=new String(); 肯定就会报错了,因为String看起来不像A,而B看起来像A。对吧。
这里考的是继承 那一块的知识。
============
另外这里的A,B两个类,你完全可以不考虑是在这个类里,可以考虑成他们分别是两个独立的文件里,效果一样的。这就是封装,不会将内部的实现暴露给你,所以你创建实例时出错了,自然是在你创建语句行出错。

网友(2):

好像不太对,如果加上try catch 块,出来的答案是B.也就是说,调用的还是B的process方法.
正确答案是:如果一个方法被重写,但是你使用多态引用来引用具有重写方法的子类型对象,编译器就会认为你正在调用该方法的超类型版本.如果超类型版本声明一个检验异常,但是重写的子类型方法没有这么做,那么编译器仍然认为你正在调用一个声明了异常的方法.