戻り値の型のみが異なるメソッドを持つインタフェースが複数あったとします。
通常これらのインタフェースを同時に実装したり拡張したりすることはできません。
コンパルエラー
interface A { int foo(); }
interface B { String foo(); }
interface AB extends A, B { }
エラー: 型Bと型Aが適合していません。両方ともfoo()を定義していますが、戻り値の型が無関係です
interface AB extends A, B { }
^
エラー1個
戻り値の型がともにインタフェースである場合も同様です。
コンパイルエラー
interface X {}
interface Y {}
interface A { X foo(); }
interface B { Y foo(); }
interface AB extends A, B {}
エラー: 型Bと型Aが適合していません。両方ともfoo()を定義していますが、戻り値の型が無関係です
interface AB extends A, B {}
^
エラー1個
ただし後者の場合は両方の戻り値の型を拡張するインタフェースを定義するとコンパイルできるようになります。
コンパイルOK
interface X {}
interface Y {}
interface A { X foo(); }
interface B { Y foo(); }
interface XY extends X, Y {}
interface AB extends A, B { XY foo(); }
あるいは両方の戻り値の型を実装するクラスであっても構いません。
コンパイルOK
interface X {}
interface Y {}
interface A { X foo(); }
interface B { Y foo(); }
class XY implements X, Y {}
interface AB extends A, B { XY foo(); }
絶対できないと思ってStackoverflowで質問したら回答があったのでびっくりしました。
How can I implement Function and BiFunction at the same time?