既存クラス A があります。(制約により A は変更不可です。)

class A {
void a() { ... sub(); ... }
void b() { ... sub(); ... }
sub() { ... }
}

このクラスを拡張して、a() メソッドが呼ばれた場合だけ sub() の内容をオーバーライドしたいのですが
どのようにするのがもっとも一般的なのでしょうか?