@ITの会議室を見てみると、以下のようなお話が。


Java のメソッド(たとえば AWT の Canvas クラスの paint メソッド)内で
自身のクラスのスーパクラスのメソッドである super.paint を呼ぶことができますが、
逆にサブクラスの paint メソッドを呼ぶことはできるでしょうか。
sub.paint みたいな感じで。
いわれてみれば確かにできない。うーむ、なんでできないんだろう。確かに普通のクラスだと無限ループに陥ってしまうけれどAbstract Classなら別に契約違反になるというわけでもないし。例えば、

public abstract class SuperCanvas {
public abstract void paint(Graphics g) {
g.setColor(Color.RED);
sub.paint(g);
}
}

public class SubCanvas extends SuperCanvas {
public void paint(Graphics g) {
...
}
}

みたいな風に書けてもいいような気がする。問題どころか、使う側にとってはsuper.paint()みたいなのを書かなくてもよいのでスーパークラスで何が行われているのか考えなくてもいいという利点もあるわけで。
まあ、無限ループに陥ることも考えられるけど、そこは言語仕様で禁止することも可能なわけで。