【发布时间】:2016-01-08 20:55:24
【问题描述】:
This 维基百科声明:
由于以前不知道多态对象的具体类型 运行时(通常),执行的函数是动态绑定的。 以下面的 Java 代码为例:
public void foo(java.util.List<String> list) { list.add("bar"); }List 是一个接口,所以 list 必须引用它的子类型。是不是一个 对 LinkedList、ArrayList 或其他一些子类型的引用 列表? add 引用的实际方法直到运行时才知道。
考虑这个例子:
List<String> list;
list = new LinkedList<String>();
foo(list);
list = new ArrayList<String>();
foo(list);
为什么这里引用的实际方法直到运行时才知道?编译器不能只检查每个对象 list 分配给哪个类型的 foo 调用吗?当然,这只有在程序具有确定性且不涉及随机性(例如用户交互)时才有可能。
这是(一般)引用的陈述中的是关于还是我的理解错误?
在程序是确定性的特殊情况下,是使用静态绑定还是 - 在 Java 中 - 总是使用动态绑定,不管有什么可能?如果有,为什么?
【问题讨论】:
-
它可以,但那将是很多工作而收效甚微。
-
@OliverCharlesworth,收获很大,超过了很多工作,因此它确实做到了!
标签: java polymorphism late-binding static-binding