编辑
2025-03-15
编程学习
00

目录

前言
静态绑定和动态绑定
测试
static 方法的静态绑定

前言

前段时间刷到一个牛客题目,问输出的结果。虽苦思冥想蒙对了,但查看解析终不解其意,遂有自己查找资料测试之意。

牛客题目如下,问输出是什么?

Java
public 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,所以是为什么呢?

静态绑定和动态绑定

测试

static 方法的静态绑定

Java
import 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 许可协议。转载请注明出处!