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



重载中,当我们重载一个方法时,为什么我们不能创建一个与重载方法相同的新方法,因为我们必须编写相同数量的代码行例如在我的示例中。。。为什么我不能制作一个新的方法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,它们在概念上都做相同的事情。它们可能被赋予不同的名称,但你需要知道你想调用哪个方法,

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

在Java中,方法不能通过其返回类型来区分/重载,尽管在Java 6中有一个错误允许重载具有不同返回类型的方法。

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

方法名称表示方法的作用。所以,若您有两个名称相同但参数不同的方法。同名有利于理解代码和更好的设计。

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

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
}

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

更多信息-->多态性与重写与重载

以下是我的解释:

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和doubles。这比单独使用sumInts()和sumDoubles()要容易得多。

方法重载是指在一个类中,有多个方法具有相同的名称,但参数不同,尽管它可以具有不同的返回类型(不同的返回形式本身并不是一个区别特征,如果只更改它将导致编译错误)。

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

我们为什么需要它

举个例子会很有启发性:让我们以无处不在的StringBuilder类及其append方法为例。它们是过载的一个典型例子。方法重载的一个特定实例也是constructor重载。再次参见StringBuilder:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html.

作为另一个适合您情况的示例:在StringBuilder类中,我们也可以有一个appendBoolean(boolean b)appendString(String b)appendChar(char c)。这是一个清晰和选择的问题,要么拥有它,要么只拥有一组过载的append方法。对我来说——因为操作是附加的,但我们附加的是不同的实例类型——拥有一个重载的append是有意义的,它提供了清晰和简洁。另一方面,对于重载构造函数,您没有这样的选择:它们需要与类具有相同的名称-根据惯例和设计:-)

最新更新