【发布时间】:2015-09-14 03:59:31
【问题描述】:
我知道重载使用静态绑定,而覆盖使用动态绑定。 但如果它们混合在一起呢? 根据this tutorial,为了解决方法调用,静态绑定使用类型信息,而动态绑定使用实际的对象信息。
那么,下面的例子中是否发生了静态绑定来确定调用哪个sort() 方法?
public class TestStaticAndDynamicBinding {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Parent p = new Child();
Collection c = new HashSet();
p.sort(c);
}
}
.
public class Parent {
public void sort(Collection c) {
System.out.println("Parent#sort(Collection c) is invoked");
}
public void sort(HashSet c) {
System.out.println("Parent#sort(HashSet c) is invoked");
}
}
.
public class Child extends Parent {
public void sort(Collection c) {
System.out.println("Child#sort(Collection c) is invoked");
}
public void sort(HashSet c) {
System.out.println("Child#sort(HashSet c) is invoked");
}
}
ps:
输出是:
Child#sort(Collection c) is invoked
【问题讨论】:
标签: java polymorphism overloading dynamic-binding static-binding