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

时间:2015-02-26 08:37:12

标签: java oop overloading

重载时,当我们重载一个方法时,为什么我们不能创建一个与重载方法相同的新方法,因为 我们必须编写相同数量的代码行 例如在我的例子中...为什么我不能创建一个新的方法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);
}

}

6 个答案:

答案 0 :(得分:1)

您可以使所有方法都有不同的名称。重点是你不必。这减少了使用API​​的开发人员需要学习的名称数量。

e.g。在PrintWriter中,您有许多名为printprintln的方法,这些方法在概念上都做同样的事情。它们本来可以有不同的名称,但是你需要知道你想要调用哪种方法,

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

方法名称表示方法的作用。所以,如果你有2个方法具有相同的名称但需要不同的参数。它有助于理解代码和更好的设计,使其具有相同的名称。

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

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

你基本上做同样的行为,即乘法,但有更多的参数。因此,最重要的是理解和良好的编码原则。

答案 3 :(得分:0)

考虑这个

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

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

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

了解详情--> Polymorphism vs Overriding vs Overloading

答案 4 :(得分:0)

这是我的解释:

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

在这种情况下,如果你使用带有int的sum方法或者double-sum方法重载,你就不在乎了,所以它会同时使用int和double。它比分别使用sumInts()和sumDoubles()容易得多。

答案 5 :(得分:0)

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

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

为什么我们需要它?

一个例子将具有启发性:让我们采用无处不在的StringBuilder类及其append方法。它们是超载的主要例子。方法重载的特定实例也是constructor重载。再次查看StringBuilderhttp://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

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