gpt4 book ai didi

java - 重载或者普通方法

转载 作者:行者123 更新时间:2023-12-02 03:14:25 25 4
gpt4 key购买 nike

我提出这个问题是为了对 java 中的重载 Concept 有一个清晰的了解。根据我的理解,重载编译器中的方法解析将寻找方法签名,即它应该具有相同的方法名称和不同的参数类型。但是如果返回类型不同怎么办?

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() 是否重载了?它有不同的返回类型。请有人说清楚。提前致谢

最佳答案

Java方法由名称和参数的类别和数量来标识。返回类型不标识方法。因此,以下代码将是非法的:

public void m1(String i) {

System.out.println(" int arg");
}

public int m1(String s) {

System.out.println("String-arg");
return (5+10);
}

If two methods of a class (whether both declared in the same class, or both inherited by a class, or one declared and one inherited) have the same name but signatures that are not override-equivalent, then the method name is said to be overloaded. (...) When a method is invoked (§15.12), the number of actual arguments (and any explicit type arguments) and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked (§15.12.2). If the method that is to be invoked is an instance method, the actual method to be invoked will be determined at run time, using dynamic method lookup (§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;
}

关于java - 重载或者普通方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com