Overloading in Java

作者: zac4j | 来源:发表于2017-05-24 23:18 被阅读13次

原文: geeks4geeks

重载 (Overload)允许不同的方法有相同的名称,但不同的签名(signatures),其中签名可以是不同的输入参数数量或者不同的输入参数类型。重载与编译时(或静态)多态相关。

// Java program to demonstrate working of method 
// overloading in Java. 
public class Sum {
  // Overloaded sum(). This sum takes two int parameters
  public int sum(int x, int y) {
    return (x + y);
  }
  // Overloaded sum(). This sum takes three int parameters
  public int sum(int x, int y, int z) { 
    return (x + y + z);
  }

  // Overloaded sum(). This sum takes two double parameters
  public double sum(double x, double y) { 
```    return (x + y);
  } 

  // Driver code
  public static void main(String args[]) { 
    Sum s = new Sum();
    System.out.println(s.sum(10, 20));
    System.out.println(s.sum(10, 20, 30));
    System.out.println(s.sum(10.5, 20.5));
  }
}

输出:

30
60
31.0

多态的好处都有啥?

我们不必为了处理相同任务的方法起更多的名称,类似于上面的代码,我们不用起诸如 sumInt, sumDouble,...,sumInt3,...之类的各种名称。

返回值类型能否重载?

答案是 No,这点和 C++ 是相同的,例如:

public class Main {
  public int foo() { 
    return 10; 
  }
  // compiler error: foo() is already defined
  public char foo() { 
    return 'a'; 
  }
  public static void main(String args[]) { 
  }
}

静态方法能否重载?

答案是 Yes,一个类可以有多个名称相同参数不同的静态方法。可以参考详情

Main() 方法能否重载?

和静态方法重载一样,答案是可以的。

// A Java program with overloaded main()
import java.io.*;
public class Test { 
  // Normal main()
  public static void main(String[] args) {
    System.out.println("Hi Geek (from main)");
    Test.main("Geek");
  }
  // Overloaded main methods
  public static void main(String arg1) {
    System.out.println("Hi, " + arg1);
    Test.main("Dear Geek","My Geek");
  }
  public static void main(String arg1, String arg2) {
    System.out.println("Hi, " + arg1 + ", " + arg2);
  }
}

输出:

Hi Geek (from main)
Hi, Geek
Hi, Dear Geek, My Geek

Java 是否允许操作符(Operator)重载?

与C++不同,Java 不允许自定义重载操作符。Java 内部允许重载操作符,如 + 被用于连接字符串。

重载(Overload)和重写(Override)的区别?

  • 重载是有相同功能的方法有不同的签名,重写两个方法可能有相同的功能,相同的签名,但是需要不同的类通过继承连接。
OverridingVsOverloading.png
  • 重载是编译时多态,重写是运行时多态。

相关文章

网友评论

    本文标题:Overloading in Java

    本文链接:https://www.haomeiwen.com/subject/nzxaxxtx.html