This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Can inner classes be overidden ? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Can inner classes be overidden ?" Watch "Can inner classes be overidden ?" New topic
Author

Can inner classes be overidden ?

faisal usmani
Ranch Hand

Joined: Jan 14, 2006
Posts: 139
Hi,

Can we override an inner class in a derived class ?

thanx in advance.
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

No, classes can never be "overridden". You can extend a class, including an inner class. But if a class is constructed by name in a piece of code, there's no way to make that code use some other class (which is the situation I expect you're facing.)

The way to fix this kind of problem is to move the constructor calls in the base class into a sort of "factory method", and then override the factory method in the subclass; i.e., if you have something like this:



then change it to this:



Now in a subclass, you can say



Now Subclass.foo() will use an instance of SubclassInner, not Inner itself.
[ April 24, 2006: Message edited by: Ernest Friedman-Hill ]

[Jess in Action][AskingGoodQuestions]
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
What would it *mean* to override an inner class?


The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
faisal usmani
Ranch Hand

Joined: Jan 14, 2006
Posts: 139
sorry Ilja for asking stupid questions :roll: . Thanx to Ernest.


One last thing is it possible to extend an inner class in a derive class directly.

There is no duty more obligatory than the repayment of kindness.
[ April 24, 2006: Message edited by: faisal usmani ]
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18541
    
    8

If the inner class is public then you can certainly write
faisal usmani
Ranch Hand

Joined: Jan 14, 2006
Posts: 139
Thanx Paul, but this code gives me error !!

______________________________________________________________________

class Outer
{
public class Inner
{
public void show()
{
System.out.println("Hello");
}
}
}

class INHERIT extends Outer.Inner
{
public static void main(String ar[])
{
System.out.println("Compiled");
}

}
Jeff Albertson
Ranch Hand

Joined: Sep 16, 2005
Posts: 1780
Inner needs an enclosing object to be constructed:

I'm not recommending this as good coding style. Needing to subclass Inner is usually a sign that (1) Inner should be a full-fledged top-level class, or (less likely) (2) Inner should be subclassed but only within a subclass of Outer:


There is no emoticon for what I am feeling!
faisal usmani
Ranch Hand

Joined: Jan 14, 2006
Posts: 139
Thanx Jeff,







That best portion of a good man's life, His little, nameless, unremembered acts of kindness and of love. No act of kindness, no matter how small, is ever wasted
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Can inner classes be overidden ?
 
Similar Threads
is inner class can be static . what is the purpose of inner class ??
Innner Class
doubt on Inner class
Inner Classes
Inner Classes