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