Pra*_*eek 9 java methods static overloading
试图重载类型的java.lang.Math.sqrt静态方法int:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
出现奇怪的错误:
Test.java:7: sqrt(int) in Test cannot be applied to (double)
return sqrt(1.0 * n);
^
1 error
Run Code Online (Sandbox Code Playgroud)
但是当明确引用该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));
}
}
Run Code Online (Sandbox Code Playgroud)
使用的编译器是标准的javac,版本1.6.0_16.
所以问题是:
提前致谢.
sep*_*p2k 13
您只能在同一个类中重载方法.即,如果您导入另一个类的静态方法,然后使用相同的名称定义自己的方法,则不会有重载决策.将简单地忽略该方法的导入版本.
对于已指定该行为:语言规范定义重载这样的:
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等价的,那么方法名称就是超载.
请注意,它说"一个类的两个方法".因此,根本不考虑从另一个类导入的方法.
因此,由于您的定义不是Math.sqrt的重载,因此它会根据定义的第6.3.1节影响它:
名为n的方法的声明d会影响名称为n的任何其他方法的声明,这些声明位于整个d范围内d出现的位置的封闭范围内.
| 归档时间: |
|
| 查看次数: |
2243 次 |
| 最近记录: |