Java Programming - Inner Classes - Discussion

Discussion Forum : Inner Classes - Finding the output (Q.No. 1)
1.
What will be the output of the program?
public class Foo 
{
    Foo() 
    {
        System.out.print("foo");
    }
    
class Bar
{
    Bar() 
    {
        System.out.print("bar");
    }
    public void go() 
    {
        System.out.print("hi");
    }
} /* class Bar ends */

    public static void main (String [] args) 
    {
        Foo f = new Foo();
        f.makeBar();
    }
    void makeBar() 
    {
        (new Bar() {}).go();
    }
}/* class Foo ends */
Compilation fails.
An error occurs at runtime.
It prints "foobarhi"
It prints "barhi"
Answer: Option
Explanation:

Option C is correct because first the Foo instance is created, which means the Foo constructor runs and prints "foo". Next, the makeBar() method is invoked which creates a Bar, which means the Bar constructor runs and prints "bar", and finally the go() method is invoked on the new Bar instance, which means the go() method prints "hi".

Discussion:
15 comments Page 1 of 2.

Nikhil said:   4 years ago
If you remove {} even that code will run, and that is the Anonymous class.

Deepak said:   5 years ago
@Sayyed Nurjahan.

system.out.println()->>> will print the output and move the next line.
system.out.print()->>>>>will print the output and be in the same line.

SAYYED NURJAHAN said:   5 years ago
Can you please tell me, What is the difference between system.out.println and system.out.print?

Vasavisreenivas said:   8 years ago
Actually, the compilation of the program do occur because the void makebar() method has to be placed in the Foo file we will get that given output as foobarhi.

Sumanth said:   9 years ago
foo f = new foo();
f.makeBar();
=========

(new Bar() {}).go();

Look at these statements closely.

Step 1:
foo f = new foo(); its Foo class constructor will be initiated first .. so "foo" will be printed (since it is system.out.print ) foo will be printed output. The output continues to print the same line

Step 2: (new Bar() {}).go(); statement.. printS barhi.., So all together output will be foobarhi.

Please correct me if I am wrong.

Emre Bayram said:   10 years ago
In Java, when a subclass is created, it automatically calls its parent's constructor (if the class itself does not define constructors).

You have a in-the-air class definition here which extends Bar. And you create an instance of this class which has no constructor so first Bar's constructor is called then go () is called (new Bar() {}).go();

Sonali said:   1 decade ago
What is the concept of go in this code?

(new Bar() {}).go();

Yugandhar said:   1 decade ago
Hi all,

Can someone explain about:

(new Bar() {}).go();

I really confused.

1) How it is anonymous class?
2) How we are able to create obj with new and anonymous class?
3) How bar constructor is getting called?

Rajeshwari said:   1 decade ago
Am not getting how to call inner class constructor. To create anonymous inner class object we use different syntax i.e we need outer class reference variable.

Please help!

Shanika said:   1 decade ago
@Sohi you are right. But the Anonymous class will not inherit the constructor right? Therefore no way of printing "bar" in the result.


Post your comments here:

Your comments will be displayed after verification.