遇到一道题,把我难住了。。。

题目是这样的,下面作为继承 A class的subclass,那个是对的。 选择两个选项

import java util.*

pubilc class A {

        public List<Number> test(set<CharSequence> s) { 

             return null;

}

答案有

A.  public ArraList<Integer> test( set<String> s ) { ... }

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

C.  public List<Integer> test(set<String> s ) { ... }

D.  public List<Object> test( set<CharSequence> s ) { ... } 

E.  public List<Integer> test (set <CharSequence> s ){ ... }

F.  pubilc ArrayList<Number> test(Set<CharSequence> s ) { ... }

 

一看到这样的题就有点儿懵逼,希望大神给个好的解题思路。感谢

BF

这道题应该问的是子类继承父类,子类重写父类的方法哪一个是对的,重写要注意方法名,传入数据类型,返回数据类型

重写必须保持参数列表一致。所以只有DEF可能是重写。
重写的返回类型要与父方法一致或者更小,这个规则不能应用于泛型(网上搜搜看 不一样的泛型相当于两种类型)。所以只有F

-------------------- 

AC的参数类型直接会和Set<CharSequence>冲突 无论重写还是重载都是非法的。
首先Set<String> 和 Set <CharSequence>是两种无关的类型,只能认为是重载。
但是如果传入一个没有指定泛型的类型,又无法判断要调用哪个方法。所以都不满足

 -----------------------

B的参数决定其是重载(参数列表不同,方法名一致,返回类型就无所谓了),所以是合法的。