Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@saka1029

戻り値の型のみが異なるメソッドを持つ複数のインタフェースを実装する

More than 5 years have passed since last update.

戻り値の型のみが異なるメソッドを持つインタフェースが複数あったとします。
通常これらのインタフェースを同時に実装したり拡張したりすることはできません。

コンパルエラー
    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?

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?