たとえば、java.io.File は単なる具象クラスです。私の代替品は、Windows ショートカットの解決をサポートしています。抽象パスで正規化/正規化/解決を行う FileSystem オブジェクトにアクセスできないため、可能な .lnk ファイルを解決するためにコンストラクター パラメーターを前処理する必要があります。前処理の必要性により、純粋なサブクラス化が除外されます。super(...) を呼び出す前に前処理を行うことはできず、File は不変です。そこで、File を拡張してデリゲートを使用し、File のすべてのコンストラクターとメソッドをオーバーライドします (すべてのコンストラクターで super("") を呼び出します)。
これはうまく機能しますが、明らかに理想的ではありません。ファイルが変更された場合、新しいメソッドやコンストラクターをオーバーライドしていないため、基になる空の抽象パス名が公開されます。明らかな何かが欠けていますか?よりシンプルでより良い方法があるはずです。