前段时间刷到一个牛客题目,问输出的结果。虽苦思冥想蒙对了,但查看解析终不解其意,遂有自己查找资料测试之意。
牛客题目如下,问输出是什么?
Javapublic class Demo {
public static void main(String[] args) {
Collection<?>[] collections
= {new HashSet<String>(), new ArrayList<String>(), new HashMap<String, String>().values()};
Super subToSuper = new Sub();
for (Collection<?> collection : collections) {
System.out.println(subToSuper.getType(collection));
}
}
abstract static class Super {
public static String getType(Collection<?> collection) {
return "Super: collection";
}
public static String getType(List<?> list) {
return "Super: list";
}
public String getType(ArrayList<?> list) {
return "Super: arrayList";
}
public static String getType(Set<?> set) {
return "Super: set";
}
public String getType(HashSet<?> set) {
return "Super: hashSet";
}
}
static class Sub extends Super {
public static String getType(Collection<?> collection) {
return "Sub";
}
}
}
答案是 Super:collection Super:collection Super:collection
,所以是为什么呢?
Javaimport java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Test test = new SubTest();
List<Integer> list = new ArrayList<>();
test.print(list);
}
abstract static class Test {
public static void print(List<Integer> list) {
System.out.println("static list");
}
public void print(ArrayList<Integer> list) {
System.out.println("non-static ArrayList");
}
}
static class SubTest extends Test {
public static void print(List<Integer> list) {
System.out.println("sub static list");
}
public void print(ArrayList<Integer> list) {
System.out.println("sub non-static ArrayList");
}
}
}
本文作者:Zerol Acqua
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!