据说重载在java中有编译时绑定但实际上是在运行时创建的对象,所以我很困惑如何进行编译时绑定。
答案 0 :(得分:2)
这意味着编译器根据所涉及的表达式的编译时类型计算出要使用的重载。示例代码:
class Parent
{
void foo(Object x)
{
System.out.println("Parent.foo(Object)");
}
}
class Child extends Parent
{
void foo(String x)
{
System.out.println("Child.foo(String)");
}
}
public class Test
{
public static void main(String[] args)
{
Child c = new Child();
c.foo("hello"); // Calls Child.foo(String)
Parent p = c;
p.foo("hello"); // Calls Parent.foo(Object)
}
}
注意变量的声明类型(Parent
或Child
分别为p
和c
)如何确定考虑哪些重载。
请注意,这与不与覆盖相同,后者基于目标对象的执行时间类型。