Inheritance versus composition: Which one should you choose?

A comparative look at two fundamental ways to relate classes

1 2 Page 2
Page 2 of 2

Don't use inheritance just to get code reuse If all you really want is to reuse code and there is no is-a relationship in sight, use composition.

Don't use inheritance just to get at polymorphism If all you really want is polymorphism, but there is no natural is-a relationship, use composition with interfaces. I'll be talking about this subject next month.

Next month

In next month's Design Techniques article, I'll talk about designing with interfaces.

A request for reader participation

I encourage your comments, criticisms, suggestions, flames -- all kinds of feedback -- about the material presented in this column. If you disagree with something, or have something to add, please let me know.

You can either participate in a discussion forum devoted to this material, enter a comment via the form at the bottom of the article, or e-mail me directly using the link provided in my bio below.

Bill Venners has been writing software professionally for 12 years. Based in Silicon Valley, he provides software consulting and training services under the name Artima Software Company. Over the years he has developed software for the consumer electronics, education, semiconductor, and life insurance industries. He has programmed in many languages on many platforms: assembly language on various microprocessors, C on Unix, C++ on Windows, Java on the Web. He is author of the book: Inside the Java Virtual Machine, published by McGraw-Hill.

Learn more about this topic

  • Bill Venners' next book is Flexible Java
  • Bill Venners just got back from his European bike trip. Read about it at
  • The discussion forum devoted to the material presented in this article
  • Links to all previous design techniques articles
  • A tutorial on cloning
  • Recommended books on Java design, including information by the Gamma, et al., Design Patterns book
  • A transcript of an e-mail debate between Bill Venners, Mark Johnson (JavaWorld's JavaBeans columnist), and Mark Balbe on whether or not all objects should be made into beans
  • Source packet that contains the example code used in this article
  • Object orientation FAQ
  • 7237 Links on Object Orientation
  • The Object-Oriented Page
  • Collection of information on OO approach
  • Design Patterns Home Page
  • A Comparison of OOA and OOD Methods
  • Object-Oriented Analysis and Design MethodsA Comparative Review
  • Patterns discussion FAQ
  • Patterns in Java AWT
  • Software Technology's Design Patterns Page
  • Previous Design Techniques articles
1 2 Page 2
Page 2 of 2