Re: Using abstract class that implements interface
On Apr 20, 9:26 am, Lew <no...@lewscanon.com> wrote:
Tom Anderson wrote:
On Mon, 20 Apr 2009, Lew wrote:
Lew wrote:
See Bloch, /Effective Java/, Item 18, "Prefer interfaces to abstract
classes".
Some of his points:
Interfaces enable safe, powerful functionality enhancements
Tom Anderson wrote:
What on earth does that mean?
It's explained in the referenced chapter.
Okay. Since i don't have a copy of the book, i will thus assume it's
meaningless.
Had I not read the chapter, I would have taken the opposite assumption. =
You
should assume it has meaning, since the author chose to make the statemen=
t. I
didn't think it would constitute fair use to quote the entire chapter, so=
I
restricted myself to quoting the talking points he introduced. He does
explain what he means by that comment, I assure you, and it has meaning, =
I
assure you.
I am rather surprised that you'd assume that Joshua Bloch would make a
meaningless statement. You might not agree with him, but he's a cogent=
writer
and in the habit of providing reasoned arguments with salient examples. =
It
would make sense to conclude that his statements have meaning, though of
course you might conclude that he's not correct in his reasoning.
FWIW, it's a really good book and very relevant to the improvement of one=
's
skill as a Java programmer. I highly recommend that you buy the book a=
nd read
it. Of course, that will have the side effect of revealing to you what=
he
meant by that remark.
I went back to the book and did the research for you. Interfaces
allow functionality enhancements by allowing a class to implement a
new interface. They're safe because you would use composition to
implement the new interface, thus you don't have to change the
inheritance hierarchy, and you don't incur the exposure of
implementation that inheritance causes. They're powerful because you
can impose any supertype on a class that it needs, and you don't have
to give up on anything the class already implements, and you get to
protect implementation.
Thus the meaning of Joshua Bloch's assertion, "Interfaces enable safe,
powerful functionality enhancements," is that improvements to what a
class does are enabled with minimized risk and maximized utility by
the use of interfaces.
--
Lew