12

请注意,在下面的示例中,仅更改了参数的顺序。所以我的问题是——我们可以把下面的例子称为方法重载吗?

public void show(String s, int a){
    System.out.println("Test.show(String, int)");
}
public void show(int s, String a){
    System.out.println("Test.show(int, String)");
}
4

1 回答 1

12

是的,这绝对是方法重载。

JLS 的第 8.4.9 节

如果一个类的两个方法(无论是在同一个类中声明,还是都由一个类继承,或者一个声明一个继承)具有相同的名称但签名不是覆盖等效的,则该方法名称被称为超载。

“替代等效”在第 8.4.2 节中进行了描述:

如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。

[ ...有关“相同参数类型...的详细信息...]

方法 m1 的签名是方法 m2 签名的子签名,如果:

  • m2 与 m1 具有相同的签名,或

  • m1 的签名与 m2 签名的擦除(第 4.6 节)相同。

如果 m1 是 m2 的子签名或 m2 是 m1 的子签名,则两个方法签名 m1 和 m2 是覆盖等效的。

于 2013-09-03T17:40:31.293 回答