 <p>You should keep in mind that "good OO" is mainly about <strong>behavior</strong> of objects. Objects (and classes) exist to "map" some "concept out of reality" into the "model" that you make the base of your application. </p> <p>Thus: you don't use <em>inheritance</em> to save a line of code here or there. You put the "B extends A" tag on B because that is the reasonable thing to do <strong>guided</strong> by your model. </p> <p>Given that: your idea of making a <em>tall</em> dog a <strong>furniture</strong> is a very nice example for people using inheritance for the completely wrong reasons!</p> <p>Thus: simply forget about this idea; and do as the comments suggest: create reasonable interfaces, and put those classes where they make sense.</p>