Re: Design question - methods calling methods
On 5/21/2010 4:20 PM, Rhino wrote:
Is it bad design for any reason for methods in one class to call other
methods in the same class to do some of their work for them? I'm pretty
sure the answer is no but this is just a sanity check to make sure I'm not
forgetting an important factor.
It's perfectly normal for one method to "re-use" another method's
code by calling that other method.
There is, however, one thing to watch out for. If the called
method can be overridden in a subclass, then the calling method
might not execute the code it wanted, but the subclass' code instead.
This may be all right (if a superclass calls hashCode() on an
instance of a subclass, it usually *wants* the subclass' hashCode()
and not its own), but can be surprising and perhaps troublesome if
you weren't expecting it. It's *especially* bad in a constructor,
where the superclass' constructor may wind up calling subclass code
before the subclass' constructor has finished!
Get a copy of "Effective Java" by Joshua Bloch, and read what
he says about designing for inheritance. Read the rest of the book,
too: It's good for the soul.
The situation that inspired the question is getLocales() method I've been
discussing in another thread. In addition to the getLocales() method, I
have a displayLocales() method. The displayLocales() method has no input
parameters and returns nothing, it simply writes to the console. It begins
by executing getLocales(), which returns a TreeMap, and then displays the
contents of the TreeMap on the console.
This seems reasonable. A subclass that overrides getLocales()
presumably does so because it wants to do something special, like
filter out Locales for which you don't have fonts installed. If so,
you'd presumably want to get the restricted Locale list rather than
the one the superclass would provide, so you'd want to use the
subclass' version of getLocales(). All seems well here -- but other
circumstances might be less benign.