执行基本方法重载程序时,我一直遇到以下错误:
sh-4.3 $ javac HelloWorld.java
HelloWorld.java:10:错误:方法show()已经在类HelloWorld中定义了 static void show()
HelloWorld.java:25:错误:方法show(int,int)已在类HelloWorld中定义 static void show(int a,int b)
2个错误
该计划的代码如下
public class HelloWorld{
static int show()
{
int c = 5+10;
System.out.println("hello");
return c;
}
static void show()
{
int c = 5+10;
System.out.println("void"+c);
}
static int show(int a,int b)
{
int c = a+b;
System.out.println("hello");
return c;
}
static void show(int a,int b)
{
int c = a+b;
System.out.println("hello void args"+c);
}
public static void main(String []args){
int a=5,b=5;
int c=show();
System.out.println("hello"+c);
show();
c= show(a,b);
System.out.println("hello"+c);
show(a,b);
}
}
答案 0 :(得分:4)
您不能在java中定义具有相同名称和相同参数但具有不同返回类型的2个方法。
在oracle tutorial中,您可以找到答案:
编译器在区分时不考虑返回类型 方法,因此您不能声明具有相同签名的两个方法 即使他们有不同的回报类型。
答案 1 :(得分:1)
static void show(int a,int b)
static void show(int a,int b)
这不是java的支持。因为两个方法的参数列表是相同的
有两种方法可以在java
中重载该方法requestFeature()
答案 2 :(得分:1)
对于java中方法的签名,存在一个非常简单的规则:
方法签名仅包含方法的名称+输入参数。
因此方法的返回类型不包含在方法签名中。
另一方面,重载意味着:
在一个具有完全相同名称但参数类型不同或参数数量不同或两者兼有的类中有两个或更多个方法。
编译器没有指出你的方法的返回类型,所以无法理解两个show方法与两个int参数之间的区别。没有参数的两个show方法也会出现同样的错误。
希望澄清是有启发性的。
祝你好运。
答案 3 :(得分:0)
重载的概念不会通过返回类型来分离两个方法/函数。因此,两种方法都被认为具有相同的特征。
要重载方法,两个方法应该具有相同的名称但不同的参数列表。参数列表的数量或数据类型可能不同。
答案 4 :(得分:0)
看起来对签名真正意味着什么方法存在误解。为了加强这些知识,请参考here。特别是这部分很重要:
定义:方法声明的两个组成部分包括 方法签名 - 方法的名称和参数类型。