いまだに継承を使うタイミングが分からない

いまだに継承を使うタイミングが分からない。もうちょっと正確にいうと実装継承を使うべきタイミングが分からない。

インタフェースを継承するのは理解できるよ。型をそろえたり、同一視したいんでしょ。
よくあるコードだとこんな感じ。ちゃんと動くかどうかは知らない。

interface Foo { ... }
class Bar implements Foo { ... }
class Baz implements Foo { ... }

List<Foo> foo = new List<Foo>();
foo.push(new Bar());
foo.push(new Baz());

でも、クラスを継承するのがよく分かんない。メソッドとかを再利用したいんなら、委譲を使ったほうが安心じゃん。不用意なメソッドを公開したりしないし。

class Foo {
  public void f() { ... }
}

// class Bar extends Foo {}のかわりに
class Bar {
  private Foo foo = new Foo();
  public void f() { foo.f(); }
}

GUIの世界で実装継承が盛んに用いられていて、便利なのもなんとなく分かるんだけど、ほかにどんな場面で用いたらいいのかがいまいち分かんない。