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 */
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.
Vidur Punj said:
1 decade ago
(new Bar() {}).go();
It should produce compile time error ;
It should produce compile time error ;
Chandni said:
1 decade ago
Why use{} after calling of Bar() in makeBar() method?
Keshav kushwaha said:
1 decade ago
Compilation fail : "The public type Foo must be defined in its own file".
Jalpesh said:
1 decade ago
@Keshav kushwaha : you should rename your java class file name as Foo.
Sohi said:
1 decade ago
@Chandni.
Its just to confuse the developer but syntax is creating an anonymous subclass of Type Bar and Using Bar class's(which is super class of Anonymous class)go() method.
Its just to confuse the developer but syntax is creating an anonymous subclass of Type Bar and Using Bar class's(which is super class of Anonymous class)go() method.
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.
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!
Please help!
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?
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?
Sonali said:
1 decade ago
What is the concept of go in this code?
(new Bar() {}).go();
(new Bar() {}).go();
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();
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();
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers