DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

13章68

この問題は、Javaのメソッドオーバーロードと型の一致に関するものです。元のメソッドのシグネチャは次の通りです:

public List<Number> test(Set<CharSequence> s) { ... }
Enter fullscreen mode Exit fullscreen mode

このメソッドは、Set<CharSequence> 型のパラメータを取り、List<Number> 型のリターン値を返します。

問題文に示されたオプションのうち、正しいオーバーロードであるBとFを検討しましょう:

  • B. public List<Integer> test(TreeSet<String> s) { ... }

    • TreeSet<String>Set<String> のサブタイプであり、StringCharSequence のサブタイプです。これは型の階層を維持しているため、オリジナルのメソッドのパラメータに型の互換性があります。
    • 戻り値は List<Integer> であり、IntegerNumber のサブタイプです。したがって、このオーバーロードは問題なくコンパイルされ、期待される動作をします。
  • F. public ArrayList<Number> test(Set<CharSequence> s) { ... }

    • パラメータ Set<CharSequence> はオリジナルのメソッドのパラメータと完全に一致します。
    • ArrayList<Number>List<Number> の実装であり、戻り値の型として有効です。こちらも互換性があり、期待どおりに動作します。

その他の選択肢は、型の一致が正しくないか、オーバーロードのルールに違反しています。そのため、BとFが正しい答えとなります。

Top comments (0)