aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes A mistake in K&B book? 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 "A mistake in K&B book?" Watch "A mistake in K&B book?" New topic
Author

A mistake in K&B book?

Krzysiek Hycnar
Ranch Hand

Joined: Jan 02, 2004
Posts: 74
Hi all,
I sent that message at Kathy's e-mail address mentioned in the book, but received no response. I also searched the archive of that forum if someone had mentioned that before, but found nothing, so I decided to put it here.
In the self test area for chapter 8 - Inner Classes I found the following question:
"1. Given the following,
public class MyOuter{
public static class MyInner{
public static void foo(){}
}
}
which statement if placed in a class other then MyOuter or MyInner, instantiates an instance of the nested class?
A. MyOuter.MyInner m = new MyOuter.MyInner();
B. MyOuter.MyInner mi = new MyInner();
C. MyOuter m = new MyOuter();
MyOuter.MyInner mi = m.new MyOuter.MyInner();
D. MyInner mi = new MyOuter.MyInner();"
In the answer section it says that the correct answer is A, and this is correct, but in my oppinion B, and D are also correct. To prove it I wrote the following test:
// firstly the class from the question #1 chpt8
package scjp.chpt08;
public class MyOuter{
public static class MyInner{
public static void foo(){}
}
}
// in another package
package scjp.testit;
import scjp.chpt08.MyOuter;
import scjp.chpt08.MyOuter.*; /* you can do this, and it makes sense if there are inner classes in MyOuter */
public class OuterInnerTest {
public static void main(String[] args) {
MyOuter.MyInner in1 = new MyOuter.MyInner();
MyOuter.MyInner in2 = new MyInner();
MyInner in3 = new MyOuter.MyInner();
// you can even add the line below and it will work too.
MyInner in4 = new MyInner();
}
}
So, the requirements for that question are met - the statement is placed outside MyOuter/MyInner (in another package as a matter of fact) and both "B" and "D" work (at least my Eclipse framework with JDK 1.4.2_02 instaled does not protest about it).
And the same about the "two minute-drill" for that chapter - I mean the key point before the last one. In the light of the above example seems not to be true.
Anybody has an idea how would that answer be marked on the real exam???
Regards
Chris
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
I imagine Kathy and Bert get a ton of e-mails and have a hard time keeping up with them all (although, from what I know of them, I'm sure they work very hard to do so). You might want to check the errata for that book to see if the error is already noted.


SCJP Tipline, etc.
Serghei Jelauc
Ranch Hand

Joined: Jul 24, 2002
Posts: 128
Hi.
I think in the book all is right.
I tryed this code and answers in IDEA 4 and JBuilder 10 and thy are accept only first answer. Other is not compiled.


SCJP 1.4 <br />SCBCD 1.3<br />SCWCD 1.4
Krzysiek Hycnar
Ranch Hand

Joined: Jan 02, 2004
Posts: 74
Well... that sounds strange I still have the project in my Eclipse IDE and it compiles without a problem. Apart from that, I use that kind of code all the time in my company projects (the platform is mainframe under OS/390 and z/OS, the compiler is Java 1.3 compatibile) and have NO problems to compile & run it (actually the fact I use it all the time and it works for me, made me start thinking there must be something wrong with that question). A friend of my has just checked the code in JBuilder 4 (a very old one ) and it works for him too.
Chris
Thomas Paul
mister krabs
Ranch Hand

Joined: May 05, 2000
Posts: 13974
Are you sure that you are doing that correctly. Note that it says "which statement if placed in a class other then MyOuter or MyInner". Since the name of the static class is MyOuter.MyInner there is no way that B & D can compile correctly from a class other than MyOuter.


Associate Instructor - Hofstra University
Amazon Top 750 reviewer - Blog - Unresolved References - Book Review Blog
Krzysiek Hycnar
Ranch Hand

Joined: Jan 02, 2004
Posts: 74
To Thomas:
Have you read my original post?? All the code I'm talkin' about is included there.

"// in another package
package scjp.testit;
import scjp.chpt08.MyOuter;
import scjp.chpt08.MyOuter.*; /* you can do this, and it makes sense if there are inner classes in MyOuter */
public class OuterInnerTest {
public static void main(String[] args) {
MyOuter.MyInner in1 = new MyOuter.MyInner();
MyOuter.MyInner in2 = new MyInner();
MyInner in3 = new MyOuter.MyInner();
// you can even add the line below and it will work too.
MyInner in4 = new MyInner();
}
}"
So you can see that the lines that attempt to instantiate MyInner instances are placed in OuterInnerTest which is "other then MyOuter or MyInner"
To all of you, interested in this topic:
If this would be helpful, I can forward anyone of you the project source (in a zipped archive). If you use Eclipse, you will be able to import the code and check it yourself in your IDE.
Cheers
Chris
R�diger Anlauf
Greenhorn

Joined: Mar 14, 2004
Posts: 1
Hi.
I think that your answer is correct, as well as K&B's. The difference is your import statement:
import scjp.chpt08.MyOuter.*;
This makes the inner class 'known', so that B & D work. The question does not mention an import, though.
Greetings, R�diger.
Krzysiek Hycnar
Ranch Hand

Joined: Jan 02, 2004
Posts: 74
Exactly R�diger!!
But you CAN place the "import scjp.chpt08.MyOuter.*;" statement - the description of the question does not forbide you to do this.
What's more if you choose to instantiate MyInner in another package you're even suppossed to use sth. like "import scjp.chpt08.*;" (what that kind of questions silently assume). Anyway, IMHO placing "import scjp.chpt08.MyOuter.*;" does NOT break the rules of the question, which means the question is not as specific as it should be (because I managed to find a way to make "B" & "D" work without breaking the rules of it).
Finally the "two-minute drill" key points... the one before the last for chapter 8 that says:
"Instantiating a static nested class requires using both the outer and nested class name as follows:
BigOuter.Nested n = new BigOuter.Nested();"
is simply not true, because I showed that you can do without the outer.
Now the big question is, if "surprises" like that can be found on the real exam. Maybe Bert or Kathy could cut my/our doubts just saying... "this is not on the exam"
Cheers
Chris
Krzysiek Hycnar
Ranch Hand

Joined: Jan 02, 2004
Posts: 74
Even funnier piece of code
package scjp.chpt08;
import scjp.chpt08.MyOuter.*; //
class MyOuter{
public static class MyInner{
}
}
public class TestIt{
public static void main(String[] args) {
MyInner in = new MyInner();
}
}
Taaaa daaaa - it works too
Chris
Roland Schneider
Greenhorn

Joined: Sep 19, 2007
Posts: 12
package scjp;

import scjp.MyOuter.MyInner;

public class NestedTest
{
/**
* @param args
*/
public static void main(String[] args)
{
MyInner inner = new MyInner();
}
}

Well and this one too...
I'm beginning to hate this BE A JAVA-COMPILER SCJP and answer stupid questions exam.
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8883
    
    5
Hi Roland,

Welcome to JavaRanch. I don't know if you noticed that this thread is about three years old

It's probably a lot less confusing for you to start up a new thread as opposed to "resurrecting" an old thread like this.

Thanks,

Bert


Spot false dilemmas now, ask me how!
(If you're not on the edge, you're taking up too much room.)
Gopika Patel
Greenhorn

Joined: Aug 05, 2007
Posts: 7
Hi Krzysiek Hycnar ,

When trying to compile the code..with jdk5.0 i found that Answer A is the only correct answer and all the other options gives compiler error
Roland Schneider
Greenhorn

Joined: Sep 19, 2007
Posts: 12
@Bert I wanted to discuss this and new K&B errors in the Errata Thread. But the thread is locked,
is there another one?

@cherish B&D works by using imports. So you don't have to use the full qualified classname.
[ September 25, 2007: Message edited by: Roland Schneider ]
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8883
    
    5
Hi Roland,

The best thing to do is to just start another thread and give it a meaningful title like "doubt about X in k&B"

Thanks,

Bert
Tashi Rautela
Greenhorn

Joined: Jun 27, 2007
Posts: 22
Hi Bert

Its an honour to talk to you..Thanks to javaranch
So how to see the errata page..how to know the errors??I want to see the earlier discussions that happened...

Many Thanks
Tashi
Tashi Rautela
Greenhorn

Joined: Jun 27, 2007
Posts: 22
Hi Bert

Its an honour to talk to you..Thanks to javaranch
So how to see the errata page..how to know the errors??I want to see the earlier discussions that happened...

Many Thanks
Tashi
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: A mistake in K&B book?