クラスの継承とは、つまり抽象化された条件判断である、という解釈が頭に思い浮かんで、けっこうしっくり来ることに気付きました。
通常、条件判断する場合には、「if うんたらかんら」といったコードを書きます。
しかし、継承を用いた(より正確にはポリモーフィズムを使った)コードでは、ifとも書かないし、条件判断式も書かないにも関わらず、条件によって異なる機能が呼び出されます。つまり、明示的に条件を示すことなく条件判断を実行するもの(つまり抽象化された条件判断)が継承である、と考えることができます。
このように考えると、よくある「犬と猫は動物だから継承で表現する」的な説明よりも、ずっと具体的にイメージしやすいと思います。もし、継承で犬と猫を表現するとすれば、それは「いちいちif 犬だとかif 猫だとか書かないで犬や猫を判断させたいから継承を使うのだ」という説明が可能になります。
そこから逆に重要なポイントが見えてきます。if 犬とソースに書く方が良いか書かない方が良いかはケースバイケースです。不必要にソースを複雑化する場合は、書かない方が良いという選択もあり得ます。そこから、継承を使うべきところと、使うべきではないところを区別する1つの判断基準が出てきます。
まあ、こんな話はどこかの頭の良い誰かがとっくに言っていると思いますが。思い付いたので書いておきましょう。