Java Programming - Inner Classes - Discussion

Discussion Forum : Inner Classes - General Questions (Q.No. 2)
2.
class Boo 
{
    Boo(String s) { }
    Boo() { }
}
class Bar extends Boo 
{
    Bar() { }
    Bar(String s) {super(s);}
    void zoo() 
    {
    // insert code here
    }
}
which one create an anonymous inner class from within class Bar?
Boo f = new Boo(24) { };
Boo f = new Bar() { };
Bar f = new Boo(String s) { };
Boo f = new Boo.Bar(String s) { };
Answer: Option
Explanation:

Option B is correct because anonymous inner classes are no different from any other class when it comes to polymorphism. That means you are always allowed to declare a reference variable of the superclass type and have that reference variable refer to an instance of a subclass type, which in this case is an anonymous subclass of Bar. Since Bar is a subclass of Boo, it all works.

Option A is incorrect because it passes an int to the Boo constructor, and there is no matching constructor in the Boo class.

Option C is incorrect because it violates the rules of polymorphism—you cannot refer to a superclass type using a reference variable declared as the subclass type. The superclass is not guaranteed to have everything the subclass has.

Option D uses incorrect syntax.

Discussion:
3 comments Page 1 of 1.

Javac said:   1 decade ago
C is incorrect indeed, but not due to polymorphism, but due to invoking it with wrong arguments (String cannot be resolved to a variable). Making it Bar f = new Boo (new String () ) { }; makes it incorrect due to polymorphism.

Sami said:   8 years ago
You are absolutely right @Javac.

The argument in Boo should be string reference or value but not a declaration!

Pooja said:   9 years ago
Haven't got this yet!

Post your comments here:

Your comments will be displayed after verification.