一、方法重载(Overload)

背景

  • 有时我们要用到一个函数同时兼容多种类型或者参数的情况,这时我们就要用到方法重载。

含义

  • 一个方法的逻辑是一样的,但是考虑到要适用不同的场景(参数个数不同,参数类型不同)。一个方法往往实现一个功能的,我们总不能因为参数个数的不同,给方法的名字起上成千上万了不同的名字吧。

作用

  • 解决了逻辑相同的方法,因为参数个数或者参数类型不同。反复起名的过程。

形象理解

  • 这里我们要实现,求和的方法。在对方法进行起名的时候,我们首先想到的就是 sum(参数),好了下边问题来了。假设我们的参数填入两个整形的时候,我们就不能叫sum了。但是要是后边在进行3个、4个、5个成千上万个参数的时候,我们不能一直起名字。此时就引入了方法重载。

重载规则

  • 重载时方法名相同。
  • 重载时方法参数一定不同(可能体现为不同方法参数个数不同或者参数个数相同但是类型不同)。
  • 方法的返回值类型不会影响重载。

注意事项

  • 重载时与返回值的类型时无关的,要是两个方法的名字和参数类型都一样,但返回值类型不一样,此时不叫方法重载,此时会编译错误。
  • 构成重载的两个方法要在同一个作用域中。

重载代码理解

class Test {public static void main(String[] args) {int a = 10;
int b = 20;
// 这里想要一个求两数之和的方法,起名为add(int a,int b)
int ret = add(a, b);
System.out.println("ret = " + ret);
// 你看这里还是相同的逻辑,但是方法的参数类型由int变为double了,重载一下,就能继续叫做add方法了。
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
// 你再看这里,逻辑功能还是求和,和上边类型时一样的,但是参数的个数不同了,方法重载引入后,就还能叫add了
double a3 = 10.5;
double b3 = 10.5;
double c3 = 20.5;
double ret3 = add(a3, b3, c3);
System.out.println("ret3 = " + ret3);
}
// 最后我们来总结一下哈。
上边的三个方法实现的功能都是求和功能,名字都叫add. 但是有的 add 是计算 int 相加, 有的是 double 相加;
有的计算两个数字相加, 有的是计算三个数字相加.同一个方法名字, 提供不同版本的实现, 称为方法重载

二、方法重写(Override)

背景

  • 原来设计有一个类,我们随着业务的更新想对原来的类进行扩展,此时引入了方法重写。

含义

  • 对于已经投入使用的类,尽量不要去修改。我们的处理方式为重新定义一个类,让这个类复用原来类全部功能和内容,并且在这个重新定义的类中进行功能的完善和扩展。

作用

  • 不影响原类的所有功能。
  • 能更好的进行功能完善以及代码维护。
  • 进行多态操作时,只需要子类重写父类的方法,不用重复写代码。

形象理解

  • 手机在刚开始的时候只能打电话,发短信。随着社会的不断发展,对通信业务要求越来越高。要对手机的功能进行完善和扩展。在扩展的时候不是在原来的类中操作。而是重写原来手机类进行重写,在原来的基础上改动即可。

注意事项

  • 方法重写的时候子类方法和父类方法的名字、参数个数、参数类型完全相同。
  • 重写的时候重写的方法(子类方法),被重写的方法(父类方法),两者是继承关系。
  • 重写的方法不能拥有比父类更严格的访问控制权限。

代码理解

// 上边说过方法重写的两个类是继承的关系。所以这里先来一个父类的定义,用形状来表示父类
class Shape {public void draw() {// 啥都不用干
}
}
// 在来上几个子类,继承自父类。
class Cycle extends Shape {// 圆圈这个子类
// 下边直接进行方法的重写,用@Override
@Override
// 下边这个访问控制权限不能高于父类
public void draw() {System.out.println("○");
}
}
class Rect extends Shape {// 矩形这个形状
// 同样进行父类方法的重写
@Override
public void draw() {System.out.println("□");
}
}
class Flower extends Shape {// 花这个形状
// 对父类方法进行重写。
@Override
public void draw() {System.out.println("♣");
}
}

三、方法重载和方法重写的区别

方法重载和方法重写的区别和作用相关推荐

  1. Java中方法重载和方法重写的区别

    文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...

  2. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

    运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...

  3. java关于重写正确,在Java中,以下关于方法重载和方法重写描述正确的是( )

    在Java中,以下关于方法重载和方法重写描述正确的是( ) 答:方法重写的返回值类型必须相同或相容.(或是其子类) 对乙酰氨基酚临床用途是抗炎抗风湿作用 答:错 观念艺术是哲学的反思,传统的理论可以对 ...

  4. JAVA 方法重载和方法覆写的区别(有代码)

    方法重载(override)与方法覆写(overload)的区别 1.方法名相同,但是各自的参数不同,叫做方法重载.方法重载的返回值都相同.其功能类的方法都使用同一名字. 举一个简单的方法重载的例子, ...

  5. 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)

    语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符) (如有错误,欢迎指正,感谢!) 类 类是面向对象的程序设计中的概念,实现信息的封装 概念: 类就是拥有相等行为和相同的属性的 ...

  6. 令人发指的关于方法重载和方法重写的一些理解(多态)

    令人发指的关于方法重载和方法重写的一些理解 文章目录 **令人发指的关于方法重载和方法重写的一些理解** **方法重载的基础** **子类的方法重载** **重载升级只重写** **顺藤摸瓜之干掉&q ...

  7. 【JVM系列3】方法重载和方法重写原理分析,看完这篇终于彻底搞懂了

    深入分析Java虚拟机中方法执行流程及方法重载和方法重写原理 前言 思考 栈帧 局部变量表(Local Variables) 操作数栈(Operand Stacks) 动态连接(Dynamic Lin ...

  8. 教妹学Java:傻傻分不清,方法重载和方法重写

    方法重载和方法重写 01.开篇 入冬的夜,总是来得特别的早.我静静地站在阳台,目光所及之处,不过是若隐若现的钢筋混凝土,还有那毫无情调的灯光. "哥,别站在那发呆了.今天学啥啊,七点半我就要 ...

  9. 重载Overload 和重写Override区别

    重载Overload 和重写Override区别 一.含义 二.代码 1.重载OverLoad 2.重写Override 一.含义 重载OverLoad:表示同一个类中的可以有多个方法名称相同的方法, ...

最新文章

  1. guava cache简单学习笔记
  2. ubuntu21.04中文冒号变乱码问题解决
  3. .NET Core WEB API中接口参数的模型绑定的理解
  4. servlet 配置 使用_配置HTTPS以与Servlet一起使用
  5. OJ系统里用BufferedReader提高效率
  6. Cookie和Session的知识
  7. 添加ejs后页面空白解决办法
  8. 读取GY-951模块数据(Linux)
  9. RedisTemplate 常用方法、序列化方式、基于 Redis 实现分布式锁
  10. struts 的radio标记的增强
  11. 【Java】URL下载网络资源(CloudMusic)
  12. 小学五年级计算机考试试题,小学信息技术考试题库中五年级试题——选择题
  13. 锐浪报表 Grid++Report uniGUI Web表格打印
  14. 深入理解卡尔曼滤波算法
  15. 【总结】NPU/CPU/GPU 傻傻分不清?
  16. hsv白色h值是多少_rgb颜色模型与hsv颜色模型的理解
  17. Google Pixel 刷机、OpenGApps和系统分区扩容
  18. Git上传代码报错Push rejected: Push to origin/master was rejected
  19. AC自动机原理及代码实现
  20. 智融SW6106、SW6206、SW6208,移动电源市场主流协议快充IC

热门文章

  1. 数字化管理驾驶舱的框架
  2. 粒子物理蒙特卡罗模拟库Geant4之能谱制作
  3. 电脑自动安装软件怎么办?
  4. 淘宝整店商品列表查询API接口(店铺所有商品API接口)
  5. 安卓8添加自定义系统服务
  6. overflow第一次觉得你有点可恶
  7. ROS aubo i5 noetic版本 机械臂 Ubuntu 20.04
  8. Proteus与模电数电学习第一弹
  9. 【读书笔记】《pattern hatching》对设计模式的十大误解
  10. SpringCloud系列——12Spring Cloud实战之统一认证与授权