The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes question about inner class instantiation 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 "question about inner class instantiation" Watch "question about inner class instantiation" New topic

question about inner class instantiation

ronnir paterl

Joined: Oct 18, 2007
Posts: 11
Hi I had a doubt about the instantiation of inner class�
From what I know instantiation of an inner class requires an object of outer class, except when the inner class is instantiated within the outer class itself.

public class outer{
class inner{

inner in = new inner();// (1) valid

public static void main(String []args){

inner in = new inner();// (2) not valid outer class object reqd.


On similar lines consider this example�

interface outer{
class inner{

public class outer2 implements outer{

public static void main(String args[]){

inner in = new inner(); // (3) valid


So my question is
1.Why cant we instantiate an inner class in a static method of outer class.
2.And why can we do the same in a class which implements the interface of the outer class.

Thanks in advance�
marc weber

Joined: Aug 31, 2004
Posts: 11343

Good question!

In an interface, a nested class definition is implicitly static. (See JLS 9.5.) Therefore, although it is a "nested" class, it is not an "inner" class. (See JLS 8, JLS 8.1.3, and JLS 8.5.2.)

Because it is static, a static nested class can be instantiated without any enclosing instance. This makes it possible to instantiate from a static context, like main, where there is no implicit "this" referencing the current instance.

(Edit: Added JLS references.)
[ November 01, 2008: Message edited by: marc weber ]

"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
I agree. Here's the link:
subject: question about inner class instantiation
It's not a secret anymore!