• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Can inner classes be overidden ?

 
faisal usmani
Ranch Hand
Posts: 139
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,

Can we override an inner class in a derived class ?

thanx in advance.
 
Ernest Friedman-Hill
author and iconoclast
Marshal
Pie
Posts: 24208
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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 ]
 
Ilja Preuss
author
Sheriff
Posts: 14112
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What would it *mean* to override an inner class?
 
faisal usmani
Ranch Hand
Posts: 139
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Sheriff
Posts: 20989
31
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If the inner class is public then you can certainly write
 
faisal usmani
Ranch Hand
Posts: 139
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Posts: 1780
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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:
 
faisal usmani
Ranch Hand
Posts: 139
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic