为什么在运行时没有实现重载?
Why is overloading not implemented at runtime?
为什么重载一般不在运行时实现?
difficulties/implications 允许语言根据实际(未声明的)参数类型在运行时 select 重载实现的原因是什么?
重载必须在编译时解决,因为在运行时解决方法分派可能不明确。
想象以下片段(有效且可编译的 Java 程序):
public class Test {
public static void main(String[] args) {
Object object = new Clazz();
method(object);
}
static class Clazz implements Interface1, Interface2 {}
interface Interface1 {}
interface Interface2 {}
private static void method(Object o) {}
private static void method(Interface1 i) {}
private static void method(Interface2 i) {}
}
如果重载真的会在运行时解决,那么调用哪个方法将是不明确的,因为 Clazz
实现了两个接口。
为什么重载一般不在运行时实现?
difficulties/implications 允许语言根据实际(未声明的)参数类型在运行时 select 重载实现的原因是什么?
重载必须在编译时解决,因为在运行时解决方法分派可能不明确。
想象以下片段(有效且可编译的 Java 程序):
public class Test {
public static void main(String[] args) {
Object object = new Clazz();
method(object);
}
static class Clazz implements Interface1, Interface2 {}
interface Interface1 {}
interface Interface2 {}
private static void method(Object o) {}
private static void method(Interface1 i) {}
private static void method(Interface2 i) {}
}
如果重载真的会在运行时解决,那么调用哪个方法将是不明确的,因为 Clazz
实现了两个接口。