在执行基本方法重载程序时,我始终收到以下错误:
sh-4.3 $ javac HelloWorld . Java < br > HelloWorld . Java:10:错误:方法show()已在类hello world中定义< br > static void show()< br > hello world . Java:25:错误:方法show(int,int)已在类hello world中定义< br> 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);
}
}
静态空显示(int a,int b)
静态空显示(int a,int b)
这在java中不受支持。因为两种方法的参数列表是相同的
有两种方法可以在java中重载该方法
By changing number of arguments
By changing the data type
java中方法的签名有一个非常简单的规则:
方法签名仅包括方法输入参数的名称。
因此方法的返回类型不包含在方法签名中。
另一方面,过载意味着:
在一个类中有两个或多个方法,具有完全相同的名称但参数类型不同或参数数量不同,或两者都有。
编译器不会指出方法的返回类型,所以无法理解带有两个int参数的两个show方法之间的区别。没有参数的两个show方法也会发生同样的错误。
希望澄清会有所启发。
祝你好运
不能在java中定义两个名称相同、参数相同但返回类型不同的方法。
在oracle教程中,您可以找到答案:
编译器在区分方法时不考虑返回类型,因此即使两个方法的返回类型不同,也不能用相同的签名声明它们。
问题内容: 为什么仅通过更改返回类型就不可能重载函数?将来的Java版本会改变吗? 顺便说一句,仅供参考,这在C ++中可能吗? 问题答案: 你无法在Java中做到这一点,也无法在C ++中做到这一点。基本原理是,仅返回值不足以使编译器确定要调用的函数:
问题内容: 如果有两个方法,则它们具有不同的参数,并且它们的返回类型也 不同 。像这样: 如果返回类型相同,则当然是 重载 。但是由于返回类型 不同 ,我们还可以将其视为 过载 吗? 问题答案: 考虑过载的以下几点: 在Java中重载方法的首要原则是更改方法签名。方法签名由参数数量,参数类型和参数顺序(如果它们是不同类型)组成。 } 方法的返回类型从不属于方法签名的一部分,因此仅更改方法的返回类型
但是同时使用不同签名和不同返回类型的重载方法有什么问题呢?为什么这会产生错误?
问题内容: 重写的方法可以有不同的返回类型吗? 问题答案: Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。 例如: 这在Java语言规范的8.4.5节中指定: 如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化
我可以看到它不工作,因为我尝试了它。我只是无法解释为什么一定要这样。 第二个方法来自一个类,该类是实现第一个getValue()方法的类的子类。 为什么同名不足以覆盖该方法?我想到的唯一论点是,它将反对“是一个”关系,因为用A扩展的第二个方法的类必须具有与A相同的能力,如果你重写返回类型,你就打破了那个法律,对吧?
问题内容: 我读过一本书,说如果签名相同,我可以覆盖一个方法。根据书中的方法签名是Method_Name + Parameters传递的。 根据这本书,我可以重写具有不同返回类型的方法。在Java中实际上是否可以覆盖具有不同返回类型的方法?因为我在网上进行了一些搜索,所以我发现有人说要覆盖方法,返回类型也应该相同。 根据这本书,它还说,当我们尝试重载具有相同方法名称和参数但返回类型不同的方法时,j