Java Programming - Inner Classes - Discussion

Discussion :: Inner Classes - General Questions (Q.No.6)

6. 

class Foo 
{
    class Bar{ }
}
class Test 
{
    public static void main (String [] args) 
    {
        Foo f = new Foo();
        /* Line 10: Missing statement ? */
    }
}
which statement, inserted at line 10, creates an instance of Bar?

[A]. Foo.Bar b = new Foo.Bar();
[B]. Foo.Bar b = f.new Bar();
[C]. Bar b = new f.Bar();
[D]. Bar b = f.new Bar();

Answer: Option B

Explanation:

Option B is correct because the syntax is correct-using both names (the enclosing class and the inner class) in the reference declaration, then using a reference to the enclosing class to invoke new on the inner class.

Option A, C and D all use incorrect syntax. A is incorrect because it doesn't use a reference to the enclosing class, and also because it includes both names in the new.

C is incorrect because it doesn't use the enclosing class name in the reference variable declaration, and because the new syntax is wrong.

D is incorrect because it doesn't use the enclosing class name in the reference variable declaration.


Subhash said: (Dec 17, 2016)  
A is also a correct answer. While working with inner classes we can create an object based on below syntax.

Outer.ineer i = new Outer.ineer();

Ninja said: (Jun 28, 2017)  
I think D is a correct answer. Anybody can explain it?

Gowtham said: (Jun 10, 2020)  
Anyone explain the correct answer.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.