我将提出这个问题,以清楚地了解在Java中重载概念。根据我的理解,重载编译器中的方法解析将寻找方法签名,它应该具有相同的方法名称和不同的参数类型。但是如果返回类型不同呢?
class Test{
public void m1(int i) {
System.out.println(" int arg");
}
public int m1(String s) {
System.out.println("String-arg");
return (5+10);
}
public static void main (String[] args) throws java.lang.Exception
{
Test t = new Test();
t.m1(5);
int i = t.m1("ani");
System.out.println(i);
}}
上述程序运行完美。我怀疑的是,方法m1()是否重载?它有不同的返回类型。有人请说清楚。提前致谢
答案 0 :(得分:2)
在Java方法中,通过名称和参数的类和数量来识别。返回类型不标识方法。因此,以下代码是非法的:
public void m1(String i) {
System.out.println(" int arg");
}
public int m1(String s) {
System.out.println("String-arg");
return (5+10);
}
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)具有相同的名称,但签名不是覆盖等价的,那么方法名称是据说超载了。 (...)当调用方法(第15.12节)时,在编译时使用实际参数的数量(以及任何显式类型参数)和参数的编译时类型来确定方法的签名将被调用(§15.12.2)。如果要调用的方法是实例方法,则将在运行时使用动态方法查找(第15.12.4节)确定要调用的实际方法
总结一下,两个具有相同名称的方法可以返回不同的类型,但是在决定调用哪个方法时不会考虑它们。 JVM首先决定调用哪个方法,然后检查该方法的返回类型是否可以分配给某个变量。
示例(尽量避免这种结构):
public int pingPong(int i) {
return i;
}
public String pingPong(String s) {
return s;
}
public boolean pingPong(boolean b) {
return b;
}
答案 1 :(得分:0)
如果我们遵循Oracle定义,那么是,这是一个重载方法
这里是info(强调我的)
Java编程语言支持重载方法和Java 可以区分具有不同方法签名的方法。 :此强> 表示类中的方法可以具有相同的名称 ,如果它们具有 不同的参数列表(对此有一些资格 将在标题为“#34;接口和继承"”的课程中讨论。
对于重载定义,方法返回值的事实是IRRELEVANT ......
另一件事是这里为什么一个方法可以返回一个值,有时候没有...
这会让人们使用代码变得疯狂,但那是另一个问题......