JUNG がツリーを有向グラフと定義していることを考えると、フォレストも有向グラフであることは確かに理にかなっています。有向グラフの和集合は有向グラフです。
これにより、Tree が DirectedGraph を拡張する必要があるかどうかという疑問が軽減されます。ツリーがグラフであることは確かに理にかなっています。それらには確かにノードとエッジがあり、上で引用した定義はそれらを特定のクラスのグラフとして定義しています。そこで問題になるのは、木を向けるべきかということです。
多くの場合、すべてのエッジがルートを指している有向木 (これらは和集合検索アルゴリズムで使用されます)、またはすべてのエッジがルートから離れた方向を指している有向木 (探索木がその例です) を考慮することは理にかなっています。ただし、無向木 (無向グラフのスパニング ツリーなど) を考慮することも理にかなっています。
デザイナーが、エッジの方向とツリー構造との関係を指定せずに、すべてのツリーが方向付けられていることを指定することを選択したことは、私にとって少し驚くべきことです (ただし、「間違っている」わけではありません)。つまり、ツリーがグラフを拡張することを単純に指定し、特定のインスタンス化でツリーが有向か無向かをさらに指定するのが合理的だと思います。規則 (ルートに向かう方向またはルートから離れる方向) を選択し、javadoc でその規則を明確に指定します。開発者が選択したソリューションでは、ツリーの実装者がエッジ全体の方向を指定することを余儀なくされ、ツリーのユーザーがその構造を利用できなくなります。たとえば、ユーザーがすべてのエッジがルートから離れていることを知っている場合、ルートから開始してルートから出るすべてのエッジにアクセスすることでグラフをトラバースできますが、両方の着信を考慮する必要があることを知らない場合は、および発信エッジ。
Java の instanceof テストのために、メソッドを持たないインターフェースを実装すると、結果が生じる可能性があります。たとえば、グラフ描画ルーチンは、グラフが有向グラフのインスタンスであるかどうかをチェックし、そうであれば、線の代わりに矢印を描画できます。
最後に、図書館で使われている用語を理解しようとするときは、ウィキペディアやその他の情報源にアクセスすることに少し注意を払う必要があります。たとえば、一部のライブラリでは、「グラフ」は実際には「有向加重グラフ」を意味します。javadoc にアクセスすることをお勧めします。