首页 > 解决方案 > Java 集合接口动态调度

问题描述

Collection<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);

for (int i = 0; i < 3; i++) {
  list.remove(i);
}
System.out.println(list);
  }

}

我的问题:为什么列表使用 remove(object o) 而不是 ArrayList.remove (int index)。我想在编译期间,列出实际对象(动态类型)(Arraylist 的方法)而不是超类的方法。

标签: javainheritancecollectionsinterface

解决方案


这会执行remove(Object),因为您的list变量是 type Collection,并且Collection没有指定remove(int index)方法。

编译器只查看变量 ( Collection) 的编译时类型,而不是对象 ( ArrayList) 的运行时类型。


推荐阅读