>>248
レスありがとうございます。
248さんの判断基準はユーザが使用するかどうかという点なのでしょうか?

AbstFooはデフォルト実装です。
そのためユーザによる拡張ポイントとなります。
class UserFoo extends AbstFoo { /* ... */ }

Fooについては普通にコード上に出てきます。
Foo独自のメソッドもあります。
ただしサービスなど共通的なクラスのI/Oは全てFooIFです。
Foo foo = new Foo();
foo.doSomething();
hogeService.invoke(foo);

class HogeService {
public void invoke(final FooIF foo) { /* ... */ }
}

なお、ユーザに使って欲しくないものは別途internalパッケージにまとめる予定です。