File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes meyer q.61 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "meyer q.61" Watch "meyer q.61" New topic

meyer q.61

Ken Truitt
Ranch Hand

Joined: Aug 23, 2007
Posts: 124
Here's another one I didn't get from the Meyer mock:

class sup {
void method() throws Exception { }

class test extends sup {
public static void main(String[] args) { //1
sup s = new test();

void method() {} // 2

What can be done to avoid compiler error?


a. Add a "throws Exception" clause at line 1 <---- first correct answ.
b. Add a "throws Exception" clause at line 2
c. Use a try catch block when calling s.method(). <--- second correct answ.
d. There is no compile error. <--- my answer
e. None of the above.


As I recall, override rules say that you can use the same, fewer, or
sub-types of exceptions from the overridden method in the overriding
method. The overriding version states no exceptions, which is valid.
But the compiler still requires that an exception be handled or declared.

SCJP 88% | SCWCD 84%
Bob Ruth
Ranch Hand

Joined: Jun 04, 2007
Posts: 320
Because the reference declared is a sup reference (superclass) and it is handed a reference to a test (subclass) object, polymorphism is in play. When the is the case, the compiler is going to require that you construct the code to handle each possible type of object whether YOUR code does it or not. The compiler isn't going to assume that the super reference will ONLY hold the subclass type....rather, it will have you code the try catch block so that either object could be put into the reference.

SCJP - 86% - June 11, 2009
Ken Truitt
Ranch Hand

Joined: Aug 23, 2007
Posts: 124
Thanks--excellent explanation
I agree. Here's the link:
subject: meyer q.61
It's not a secret anymore!