重载方法的基本概念是什么

What is the basic concept of overloading a method

重载中,当我们重载一个方法时,为什么我们不能创建一个与重载方法一样工作的新方法,因为我们必须写相同数量的代码行 例如在我的示例中...为什么我不能制作一个新的方法b() 将两个数字相乘。

public class que {

public void a(int a)
{
    System.out.println(a);
}


public  void a(int b,int c) {
  System.out.println(b*c);

}

public static void main(String[] args) {
    que queObject = new que();
    queObject.a(5);
    queObject.a(3,4);
}

}

你可以让你所有的方法有不同的名字。关键是你不必这样做。这减少了使用 API 的开发人员需要学习的名称数量。

例如在 PrintWriter 中,您有很多称为 printprintln 的方法,它们在概念上都做同样的事情。它们可以被赋予不同的名称,但是你需要知道你想调用哪个方法,

在运行时,每个方法签名都是唯一的,因为它包括 return 类型和非泛型参数类型形式。即在字节码中,名称对您来说是唯一的。

在 Java 中,方法不能 distinguished/overloaded 是 return 类型,尽管在 Java 6 中有一个错误允许重载具有不同 return 类型。

没有人说你做不到。它只是不是 方法重载 。这被定义为具有相同名称但具有不同(参数)签名的两个或多个方法。

方法名表示方法的作用。因此,如果您有 2 个具有相同名称但需要不同参数的方法。同名有利于代码的理解和更好的设计

所以如果你添加另一个方法

public  void a(int b,int c,int d) {
 System.out.println(b*c*d);
}

你基本上做了相同的行为,即乘法,但参数更多。所以重写对于理解和良好的编码原则更好。

考虑一下

public  void eat(Orange o) {
  // eat Orange
}

public  void eat(Mango m) {
  // eat Mango
}

您希望根据作为参数传递的内容进行不同的实现,但希望保持方法名称相同。

更多信息-->Polymorphism vs Overriding vs Overloading

这是我的解释:

public class Calculator {

    // used for integer numbers
    public int sum(int a, int b) {
        return a + b;
    }

    // used for double numbers
    public double sum(double a, double b) {
        return a + b;
    }
}

在这种情况下,您不关心是否将 sum 方法与 int 或 double 一起使用 - sum 方法被重载,因此它将同时使用 int 和 double。这比分别使用 sumInts() 和 sumDoubles() 容易得多。

方法重载是指在 class 中有多个同名但参数不同的方法,尽管它可以有不同的 return 类型(不同的 return 类型是本身并不是一个显着特征,如果仅更改它会导致编译错误)。

有关完整的讨论,请参阅:http://beginnersbook.com/2013/03/polymorphism-in-java/

我们为什么需要它?

一个例子很有启发性:让我们以无处不在的 StringBuilder class 及其 append 方法为例。它们是超载的典型例子。方法重载的一个具体实例也是 constructor 重载。再看StringBuilderhttp://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html.

另一个适合你的例子:我们也可以在 StringBuilder class 中有一个 appendBoolean(boolean b) 和一个 appendString(String b) 和一个 appendChar(char c) .拥有那个或只拥有一组重载的 append 方法是一个清晰度和选择的问题。对我来说——因为操作是追加,但我们追加的是不同的实例类型——重载 append 是有意义的,并且提供清晰和简洁。另一方面,对于重载的构造函数,您没有这样的选择:它们需要与 class 具有相同的名称 - 这是约定和设计:-)