この問題は、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)