この問題は、Javaのメソッドオーバーロードと型の一致に関するものです。元のメソッドのシグネチャは次の通りです:
public List<Number> test(Set<CharSequence> s) { ... }
このメソッドは、Set<CharSequence> 型のパラメータを取り、List<Number> 型のリターン値を返します。
問題文に示されたオプションのうち、正しいオーバーロードであるBとFを検討しましょう:
-
B.
public List<Integer> test(TreeSet<String> s) { ... }-
TreeSet<String>はSet<String>のサブタイプであり、StringはCharSequenceのサブタイプです。これは型の階層を維持しているため、オリジナルのメソッドのパラメータに型の互換性があります。 - 戻り値は
List<Integer>であり、IntegerはNumberのサブタイプです。したがって、このオーバーロードは問題なくコンパイルされ、期待される動作をします。
-
-
F.
public ArrayList<Number> test(Set<CharSequence> s) { ... }- パラメータ
Set<CharSequence>はオリジナルのメソッドのパラメータと完全に一致します。 -
ArrayList<Number>はList<Number>の実装であり、戻り値の型として有効です。こちらも互換性があり、期待どおりに動作します。
- パラメータ
その他の選択肢は、型の一致が正しくないか、オーバーロードのルールに違反しています。そのため、BとFが正しい答えとなります。
Top comments (0)