Java中方法重写与重载的区别
作者:大雄有哆啦梦 发布时间:2022-07-25 04:49:01
Java方法重写(Override)与重载(Overload)的区别(超详细)
首页在我们要学习这个知识点之前,应该要先了解什么是多态?
在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。
多态是同一个行为具有多个不同表现形式或形态的能力。
举个例子,比如大多数动物(抽象类)会叫,但是狗(实现类)就是汪汪汪,猫(实现类)就是喵喵喵。
多态实现的必要条件
子类必须继承父类必须有重写父类引用指向子类对象
多态的实现途径
多态的实现途径有三种:重写、重载、接口实现,虽然它们的实现方式不一样,但是核心都是:同一行为的不同表现形式。
在大概了解什么是多态后,接下来就看看Java方法重写(Override)与重载(Overload)
一、重写(Override)
父类与子类之间多态的关系,对父类的函数进行重新定义。如果在子类中定义的某些方法和父类有相同的名称和参数,那么这就是方法被重写了。
但是有时候子类并不想一动不动的继承父类的方法,想做一些修改,这就需要采用方法的重写。
方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.
重写代码如下:
public class Father {
public void walk(){
System.out.println("我是父亲");
}
}
public class Son extends Father {
@Override//方法重写
public void walk() {
System.out.println("我是儿子");
}
}
方法重写又称为方法覆盖。
如果子类的方法与父类中的某一个方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有方法。子类方法的访问修饰权限不能小于父类的。
二、重载(Overload)
多个同名的方法同时存在,具有不同的参数/类型。重载是一个类中多态性的一种表现重载的时候,方法名必须一样,但参数类型和个数不一样,返回值类型可以一样也可以不一样。我们不能以返回值类型作为重载方法的区分标准!!!如果参数类型和个数一样,返回值类型不同是不算重载的.
这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。在调用方法时,通过传递给它们不同的参数个数和参数类型来决定去使用哪个对应的方法,这就是多态性。
重载代码如下:
public void eat(){
System.out.println("我是干饭人" );
}
// public int eat(){ 会报错
// return 4;
// }
//报错原因:参数类型和个数一样,返回值类型不同是不算重载的
//因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。
public void eat(String name){
System.out.println("我是干饭人:"+name );
}
public void eat(String name,int age){
System.out.println("我是干饭人:"+name+"我今年"+age );
}
这里要注意:
重写Override是父类与子类之间多态的关系,而重载Overload是一个类中多态性的表现。
三、总结
方法重载Overload:
1、同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型)
3、方法返回值、访问修饰符任意
4、与方法的参数名无关
方法重写Override:
1、有继承关系的子类中
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
3、访问修饰符,访问范围需要大于等于父类的访问范围
4、与方法的参数名无关
来源:https://blog.csdn.net/weixin_46015018/article/details/122600829


猜你喜欢
- @ApiImplicitParam作用在方法上,表示单独的请求参数参数name:参数名。value:参数的具体意义,作用。required:
- 半路开始看的朋友可以回顾一下前几篇java并发编程专题(一)----线程基础知识java并发编程专题(二)----如何创建并运行java线程
- 1、概述本文通过手动实现迭代器来了解foreach语句的本质。2、使用foreach语句遍历集合在C#中,使用foreach语句来遍历集合。
- 本文将介绍如何通过Java程序来查找并高亮PDF中的文本。使用工具:Free Spire.PDF for Java(免费版)Jar文件获取及
- 简单版/** * 产生4位随机数(0000-9999) * * @return 4位随机数 &nb
- 考虑一个场景,轮流打印0-100以内的技术和偶数。通过使用 synchronize 的 wait,notify机制就可以实现,核心思路如下:
- 目录第一种方式第二种方式第三种方式第四种方式(缺点:将所有的数字类型都会转为字符串)web项目中,Java后端传过来的Long/long类型
- 1.注解的理解1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包. 类、方法、属性、构造器、局部变量等数据信
- Android中Toolbar随着ScrollView滑动透明度渐变效果实现一.思路:监听ScrollView的滑动事件 不断的修改Tool
- 1、Handle,MessageQueue,Message类图Handle: 处理消息,并提供一系列函数帮忙我们创建消息和插入消息到消息队列
- 1.scope 作用域Spring 管理的 bean 是根据 scope 来⽣成的,表示 bean 的作⽤域,共4种,默认值是 single
- 最近学习JavaFx,发现网上大概只有官方文档可以查阅,学习资料较少,写个拼图游戏供记录。。大概说一下思路:1.面板的构建:面板采用Grid
- Spring使用AOP完成统一结果封装起因:自己写项目的时候忍受不了每个方法都要写一个retrun Result.success();和 r
- 本文主要为大家分析了图书商城的用户模块,具体内容如下1、用户模块的相关类创建domain:Userdao:UserDaoservice:Us
- 本文实例为大家分享了java判断某个点是否在所画范围内的具体代码,供大家参考,具体内容如下IsPtInPoly.javapackage co
- 本文实例讲述了Android编程实现读取本地SD卡图片的方法。分享给大家供大家参考,具体如下:private Bitmap getDiskB
- 目录Bitmap类BitmapData类参考:Bitmap类Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组
- 常量,顾名思义,就是“不会改变的量”。我们平时书写的数字(比如12.85)、字符(比如'F')、字符串(比如"谢谢
- mybatis使用${}时sql注入的问题最近在上线项目的时候,代码审查没有通过,提示有sql注入的风险。ORDER BY ${orderB
- 第一步:项目中资源配置文件夹(resources文件夹)下先新增测试环境application-dev.yml和application-pr