【问题标题】:Can changes in the order of the method parameters be called method overloading?方法参数顺序的变化可以称为方法重载吗?
【发布时间】:2013-09-04 01:40:31
【问题描述】:

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

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)");
}

【问题讨论】:

  • 签名改变,当然是超载了。
  • 是的,它们超载了。你可以自己检查一下。如果方法重载错误,编译器会报错。
  • 可以吗?是的。应该?可能不会。
  • @RohitJain 我猜 OP 的问题不是,如果这是可能的,但如果 overloading 是它的正确术语,Jon Skeet 完美解释(再次)
  • @Juvanis 只是因为签名发生了变化,这并不意味着它正在超载。事实上,Java 不支持返回类型重载(然而,签名正在改变)。

标签: java overloading


【解决方案1】:

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

来自section 8.4.9 of the JLS

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

section 8.4.2 中描述了“覆盖等效”:

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

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

如果满足以下任一条件,方法 m1 的签名是方法 m2 签名的子签名:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多