【发布时间】:2011-01-17 20:43:03
【问题描述】:
试图为int 类型重载java.lang.Math.sqrt 静态方法:
import static java.lang.Math.sqrt;
class Test
{
private static double sqrt(int n)
{
return sqrt(1.0 * n);
}
public static void main(String[] args)
{
System.out.println(sqrt(1));
}
}
出现了一个奇怪的错误:
Test.java:7: sqrt(int) in Test cannot be applied to (double)
return sqrt(1.0 * n);
^
1 error
但是当显式引用 java.lang.Math.sqrt 方法时一切正常:
class Test
{
private static double sqrt(int n)
{
return Math.sqrt(1.0 * n);
}
public static void main(String[] args)
{
System.out.println(sqrt(1));
}
}
使用的编译器是标准的javac,版本1.6.0_16。
所以问题是:
- 为什么编译器无法解决第一种情况下的重载问题?
- Java 语言规范中在哪里指定了此行为?
提前致谢。
【问题讨论】:
-
严格来说,这里并没有重载任何方法。
标签: java static methods overloading