【问题标题】:Method overloading or not?方法重载与否?
【发布时间】:2017-12-12 18:00:25
【问题描述】:

场景:同一个类中有两个方法,同名,不同的参数和不同的访问修饰符。例如:

public void m1(int a){}
private void m1(String b){}

是否超载?

【问题讨论】:

  • 为什么你认为不是?

标签: java methods overloading


【解决方案1】:

是的 - 总之,是的。引用Oracle's Java tutorial:

这意味着如果类中的方法具有不同的参数列表,则它们可以具有相同的名称

换句话说 - 访问修饰符对本次讨论无关紧要。

【讨论】:

  • “非覆盖等效的签名”更具体。 public void m1(List<Integer> l)public void m1(List<String> l) 具有不同的参数列表,但它们是等效的。所以这里没有重载。
【解决方案2】:

让我们参考一下 Java 语言规范。

Section 8.4.9 Overloading

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

从第 8.4.2 节中,我们知道参数类型是签名的一部分,并且您的两个方法的参数类型不同,因此它们是重载。

Section 8.4.2 Method Signature

两个方法或构造函数,M 和 N,如果它们具有相同的签名 具有相同的名称、相同的类型参数(如果有)(第 8.4.4 节),并且, 在将 N 的形式参数类型调整为类型之后 M 的参数,相同的形参类型

【讨论】:

    【解决方案3】:

    “同一类中同一方法的两个版本”称为方法重载或编译时多态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多