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 Why does this work ? (Question from ExamLab) Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of REST with Spring (video course) this week in the Spring forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Why does this work ? (Question from ExamLab)" Watch "Why does this work ? (Question from ExamLab)" New topic

Why does this work ? (Question from ExamLab)

John Stark
Ranch Hand

Joined: Jul 19, 2011
Posts: 185
This works:

The return type of getInner() is something which does not exists for class Main as Inner is private in class A. However the code compiles fine and gives an output like A$Inner@hgdyeu. But when I replace


then I get the compilation error: error: toString() in Object is defined in an inaccessible class or interface
System.out.println(new A().getInner().toString());

toString() is obviously successfully called in System.out.println(new A().getInner()); as I get the corresponding output. Why does this work and System.out.println(new A().getInner().toString()); does not work?


Stephan van Hulst

Joined: Sep 20, 2010
Posts: 4199

You can't call methods directly on inaccessible types. However, if you cast them to one that's accessible, then you can. This is exactly what happens when you pass the Inner object to the println() method. Its signature uses the Object class, so the Inner object gets cast to Object before its toString() method is called.

Try to do the same by assigning getInner() to a variable of type Object first, before calling toString().

The mind is a strange and wonderful thing. I'm not sure that it will ever be able to figure itself out, everything else, maybe. From the atom to the universe, everything, except itself.
John Stark
Ranch Hand

Joined: Jul 19, 2011
Posts: 185
Yes, indeed this works:

Thanks a lot for the clarification.

I agree. Here's the link:
subject: Why does this work ? (Question from ExamLab)
It's not a secret anymore!