【问题标题】:overloading methods in Java [duplicate]Java中的重载方法[重复]
【发布时间】:2015-08-18 16:06:02
【问题描述】:

必须满足哪些条件才能使两个方法正确地成为重载方法?

是不是两个方法必须至少在它们的参数列表上有所不同,例如

public void A() { //... }
public void A(int val) { //.. } 

因此,仅仅改变返回类型和/或访问修饰符不会产生两个重载方法吗?

【问题讨论】:

  • 该示例显示了两种不同的方法。重载的方法在同一个类中具有相同的名称、不同的参数和相同的返回类型。
  • 是的,当然。我的粗心!
  • @RyanJ Overloaded methods possess [..] the same return type [..] 好吧,我不会把我的钱赌在你声明的那部分......
  • 对,我的错。返回类型不需要相同。
  • Deitel 写的最好的书之一(这个版本很旧)正是你所需要的deitel.com/articles/java_tutorials/20050909/…

标签: java overloading


【解决方案1】:

你是对的。返回类型和访问修饰符不是方法重载的限定因素。将方法限定为重载的是传递的参数,即参数的类型、传递的参数数量或两者兼而有之。

【讨论】:

    【解决方案2】:

    规则远非任意:说你有

    String a() {}
    Date a() {}
    

    你会怎么称呼a?让我们看看:

    Object o = a(); // which a() is called?
    

    仅通过访问修饰符不同的方法将更没有意义:它们将是相同方法的两个副本,但行为不同。

    因此,实际规则将方法签名定义为由固定在每个调用站点的那些部分组成:名称和参数类型。一个类不能有两个具有相同签名的方法。

    【讨论】:

    • 以这种方式声明方法虽然会产生编译器错误。
    • 谢谢。所以相同的名称,不同的方法参数,而其余的,即访问修饰符,返回类型是任意的?
    【解决方案3】:

    你是对的兄弟,访问修饰符和返回类型的改变不会使方法重载。关键是具有相同名称和不同签名(参数)的方法被称为 overloaded 。这是使方法重载的充分条件。

    【讨论】:

      【解决方案4】:

      唯一的规则是从 JVM 角度来看,重载的方法必须具有相同的名称和不同的参数类型,例如你不能有以下两种方法:

      public int methodA(int... array);
      public void methodA(int[] array);
      

      与可见性修饰符或返回类型无关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多