一、什么是方法重载

  方法的重载就是在同一个类中,有着若干个名字相同的方法。在具体调用这些方法的时候,通过传递参数的不同来调用这些重载方法。

二、为什么需要方法重载

  1. 方法名的定义需要做到见名知意,功能类似的方法一定程度上注定了方法名的相同,重载的使用有好的解决了这种因见名知意带来的方法名冲突。
  2. 重载可以提高代码的可读性和可维护性。方法名相同的方法在一起能够清晰知道每一个方法的区别,提高代码可读性,也方便后期的代码维护。

三、方法重载的规则

  1. 方法名必须相同

    public static int add(int a){
    return a+1;
    }
    public static int add(int a,int b){
    return a+b;
    }
    public static int add(int a,int b,int c){
    return a+b+c;
    } 

    方法名必须相同,比如这里的add()方法,如果第二个add()方法改成add2()那就不是方法重载了。

  2. 方法的参数列表必须不相同。(方法的参数列表包括方法的参数个数以及参数类型和参数顺序)
    1. 参数个数不相同,还是上面代码:

      public class Myclass {
      
          public static int add(int a){
      return a+1;
      }
      public static int add(int a,int b){
      return a+b;
      }
      public static int add(int a,int b,int c){
      return a+b+c;
      } public static void main(String[] args) {
      System.out.println(add(1));
      System.out.println(add(1,2));
      System.out.println(add(1,2,3));
      }
      } 

       运行结果如下:

      2
      3
      6
    2. 参数类型不相同
      public class Myclass {
      
          public static void add(int a,int b){
      System.out.println(a+b);
      }
      public static void add(double a,double b){
      System.out.println(a+b);
      }
      public static void main(String[] args) {
      add(1,2);
      add(1.2,2.3);
      }
      }

      运行结果:

      3
      3.5

      这里的参数不同,一个是int类型的参数,一个是double类型的参数,满足重载的条件

    3. 参数顺序不同也可以满足重载
      public class Myclass {
      
          public static double add(double b,int a){
      return a+b;
      }
      public static double add(int a,double b){
      return a*b;
      }
      public static void main(String[] args) {
      System.out.println(add(1.2,2));
      System.out.println(add(2,2.0));
      }
      }

      运行结果:

      3.2
      4.0

      这里对参数顺序进行调换位置,编译器依旧能够找到对应的方法。

    4. 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。

四、方法重载的注意事项

  • 方法的返回类型可以相同也可以不相同。

    这里让参数保持一致,改变方法类型。根据IDEA提示发现无法在参数一致的时候通过方法返回类型来进行方法重载

    当适当的改变方法参数,代码如下,编译通过。

    public class Myclass {
    
        public static int add(int a,int b){
    return a+b;
    }
    public static double add(int a,double b){
    return a+b;
    }
    public static void main(String[] args) {
    System.out.println(add(1,2)); //输出3
    System.out.println(add(1,2.0)); //输出3.0
    }
    }

      由上可知,方法重载的关键是在参数列表上,仅仅返回类型不同不足以称为方法的重载,方法的返回类型可以相同也可以不相同。

  • 方法的修饰符并不影响方法的重载。
    我们改变上例中方法的修饰符。结果正常输出:
    public class Myclass {
    
        public static int add(int a,int b){
    return a+b;
    }
    static double add(int a,double b){
    return a+b;
    }
    public static void main(String[] args) {
    System.out.println(add(1,2)); //输出3
    System.out.println(add(1,2.0)); //输出3.0
    }
    }
  • main方法也可以被重载。
    public class Myclass {
    public static void main(String name) {
    System.out.println(name+"你好");
    }
    public static void main(String[] args) {
    main("ThreePure");
    }
    }

    main方法可以重载,只不过虚拟机只调用带字符串公共类型的main方法,public static void main(String[] args){}。

五、方法重载与方法重写的区别

 
  重载 重写
相同 方法名称相同
英文 Overloading Overiding
范围 同一个类  继承中的子类
区别 需要参数列表不同 只有方法体不同,方法列表也必须相同
其他要求 对修饰符,返回值类型没有特殊要求 对权限等其他都有特定要求

  区别重载和重写的最好的判断方法就是是否出现在继承中,以及参数列表是否必须完全相同。

Java的重载以及与重写的区别的更多相关文章

  1. Java 方法重载与方法重写

    方法重载(Overload): 1.在同一个类中 2.方法名相同 3.参数的个数或类型不同 4.与方法的返回类型无关 5.与方法的修饰符无关 方法重写(Override): 方法重写必须是子类继承父类 ...

  2. Java基础-方法重载和方法重写的区别

    什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2)  ...

  3. Java中重载(overloading)和重写(Overriding)的区别

    一:方法的重载 (1)方法重载指在类中定义方法名相同,参数不同的不同的多个方法(返回值类型可随意,不能以返回类型作为重载函数的区分标准). 参数不同表现: 1.参数的个数不同 2.参数的类型不同 3. ...

  4. Java面试 - 重载(Overload)和重写(Override)的区别?

    1.重载是在同一个类中,可声明多个同名方法,但参数列表不同(参数顺序,个数,类型).而重写是在子类中,对从父类中继承的方法进行重新编写,但方法名,参数列表(参数顺序,个数,类型),返回值类型必须保持一 ...

  5. Java 方法重载,方法重写(覆盖),继承等细节注意

    1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的 ...

  6. AJPFX总结方法重载与方法重写的区别

    方法重载在同一个类中,可以出现同名方法,但是这些同名方法的参数列表必须不同,这样定义方法叫做方法重载.方法重载的特点重载的注意事项重载与返回值无关重载与具体的变量标识符无关重载只与方法名与参数相关重载 ...

  7. C#方法重载和方法重写的区别

    一.重载的条件: 1.必须在同一个类中: 2.方法名必须相同: 3.参数列表不能相同. 二.重写的条件: 1. 在不同的类中2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致(必须具有相 ...

  8. 【Java】重载(Overload)与重写(Override)

    方法的语法 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 重载(overload) /** * 重载Overload: * 同一个类中,多个方法 ...

  9. overload(重载) 和 override(重写)的区别

    overload(重载): 重载是基于一个类中,方法名相同,参数列表不同(如果参数列表相同时,参数的类型要不同),与返回值和访问修饰符都无关 如果在面试中就直接说:"同名不同参"  ...

随机推荐

  1. Realtime Data Processing at Facebook

    概要 这篇论文发表于2016年,主要是介绍Facebook内部的流式计算平台的设计与思考,对于流式计算的关键特性的实现选型上进行深度对比分析. 流式计算系统5个衡量指标 文中提到有5个重要的考量部分 ...

  2. Java高性能本地缓存框架Caffeine

    一.序言 Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存. 二.缓存简介 ...

  3. Meterpreter文件系统命令

    实验目的 掌握Meterpreter的文件系统命令 实验原理 1.Meterpreter介绍 meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷 ...

  4. [数分笔记]问题1.1 T1

    题目:非负整数a,b使得为整数,求证这个整数必是某一整数的平方.(1988年第29届国际数学奥林匹克竞赛试题) 证明:设k=,k为非负整数 1°a=b k=2a²/(1+a²)=2-2/(1+a²) ...

  5. [题解]UVA11027 Palindromic Permutation

    链接:http://vjudge.net/problem/viewProblem.action?id=19602 描述:给出一个字符串,求重新排列后第n个回文串,若没有则输出"XXX&quo ...

  6. 【C#基础概念】Ineterface 接口的设计原则

    接口设计方式 自顶向下 (如图所示),自底向上(发现类需要结构了就声明一个接口). 接口的作用 用来解耦.继承 接口的本质

  7. KTL 一个支持C++14编辑公式的K线技术工具平台 - 第四版,稳定支持Qt5编程,zqt5语法升级,MA函数提升性能1000%,更多公式算法的内置优化实现。

    K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL 国内仓库 ...

  8. Python 单例模式的几种实现方式

    单例模式的几种实现方式 先来看几个魔法方法的简单运用:__new__, __init__, __call__. class A(object): def __init__(self, x): prin ...

  9. Pandas:plot相关函数

    0.注意事项 及 各种错误 1)绘制bar图时,如果出现重复的x值被合并到一个情况(导致X轴应该显示内容有缺失),可能是由于Pandas版本太低: 2)无法设置中文title,在代码中加入两句话: p ...

  10. Python音频操作+同时播放两个音频

    对于python而言,音频的操作可以使用pygame包中的sound 和 music对象,本博客主要讲解这两个对象. 1.sound对象 Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文 ...