階層は抽象クラスに基づいていなければなりません。
抽象クラスに基づく階層を使用すると、クリーンなインターフェースの作成に集中する、実装詳細をインターフェースから切り離す、コンパイルの依存性を最小限に抑えるといったことができ、代替実装の共存も可能になります。