zoukankan      html  css  js  c++  java
  • 034:Java 方法重载

    Java 方法重载

    (转自:http://c.biancheng.net/view/940.html

    Java 允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(overload)。
    例如,在 JDK 的 java.io.PrintStream 中定义了十多个同名的 println() 方法。

    1. public void println(int i){…}
    2. public void println(double d){…}
    3. public void println(String s){…}

    这些方法完成的功能类似,都是格式化输出。根据参数的不同来区分它们,以进行不同的格式化处理和输出。它们之间就构成了方法的重载。实际调用时,根据实参的类型来决定调用哪一个方法。例如:

    1. System.out.println(102);    // 调用println(int i)方法
    2. System.out.println(102.25);    // 调用println(double d)方法
    3. System.out.println("价格为 102.25");    // 调用println(String s)方法

    方法重载的要求是两同一不同:同一个类中方法名相同,参数列表不同。至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。
    使用方法重载其实就是避免出现繁多的方法名,有些方法的功能是相似的,如果重新建立一个方法,重新取个方法名称,会降低程序可读性。
    例 1

    在比较数值时,数值的个数和类型是不固定的,可能是两个 int 类型的数值,也可能是两个 double 类型的数值,或者是两个 double、一个 int 类型的数值;在这种情况下就可以使用方法的重载来实现数值之间的比较功能。具体实现代码如下:

     1 public class OverLoading {
     2     public void max(int a, int b) {
     3         // 含有两个int类型参数的方法
     4         System.out.println(a > b ? a : b);
     5     }
     6  
     7     public void max(double a, double b) {
     8         // 含有两个double类型参数的方法
     9         System.out.println(a > b ? a : b);
    10     }
    11   
    12     public void max(double a, double b, int c) {
    13          // 含有两个double类型参数和一个int类型参数的方法
    14         double max = (double) (a > b ? a : b);
    15          System.out.println(c > max ? c : max);
    16     }
    17  
    18    public static void main(String[] args) {
    19        OverLoading ol = new OverLoading();
    20          System.out.println("1 与 5 比较,较大的是:");
    21         ol.max(1, 5);
    22         System.out.println("5.205 与 5.8 比较,较大的是:");
    23         ol.max(5.205, 5.8);
    24         System.out.println("2.15、0.05、58 中,较大的是:");
    25          ol.max(2.15, 0.05, 58);
    26      }
    27  }

    编译、运行上面程序完全正常,虽然 3 个 max() 方法的方法名相同,但因为它们的形参列表不同,所以系统可以正常区分出这 3 个方法。当运行时,Java 虚拟机会根据传递过来的不同参数来调用不同的方法。运行结果如下:

    1 与 5 比较,较大的是:

    5

    5.205 与 5.8 比较,较大的是:

    5.8

    2.15、0.05、58 中,较大的是:

    58.0

    为什么方法重载不能用方法的返回值类型区分呢?
    对于int f( ) { }和void( ) { }两个方法,如果这样调用int result = f();,系统可以识别是调用返回值类型为 int 的方法,但 Java 调用方法时可以忽略方法返回值,如果采用如下方法来调用f();,你能判断是调用哪个方法吗?如果你尚且不能判断,那么 Java 系统也会糊涂。在编程过程中有一条重要规则就是不要让系统糊涂,系统一糊涂,肯定就是你错了。因此,Java 里不能用方法返回值类型作为区分方法重载的依据。

    本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15553941.html

  • 相关阅读:
    乱谈服务器编程
    set global slow_query_log引起的MySQL死锁
    一个由string使用不当产生的问题
    Hbase初体验
    浅谈SQLite——查询处理及优化
    ACID、Data Replication、CAP与BASE
    libevent源码分析
    浅析Linux Native AIO的实现
    vim7.2中文乱码解决方法
    伸展树的点点滴滴
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/15553941.html
Copyright © 2011-2022 走看看