interface と abstract class をどのように使い分けるのですか?
随分前に(1年半くらい前)これを見ていまいち判然としないなーと思っていたのですが、最近こう理解しつつあります。
- 基本はinterfaceを使う
- Abstractクラスは次のどちらかとしてのみ使う
- インタフェースの骨格実装(コレクションフレームワークのAbstractListみたいなの)
- ファクトリクラス(NumberFormatみたいなの)
- こういうことはしない(ほうがいいんじゃないかと思う)。
// 継承関係があるとする AbstractClass ac = new ConcreatClass();
こういうときは潔くinterfaceをつくってinterfaceの型で扱う。(AbstractClassは骨格実装の役割にさせる)