java 重载(overload)与重写(override)详解及实例
作者:lqh 发布时间:2021-06-18 15:59:45
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆。
先给出我的定义:
overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参数不同的方法组。本质是对不同方法的称呼。
override(覆写):存在继承关系的两个类之间,在子类中重新定义了父类中存在的方法。本质是针对同一个方法,给出不同的实现。
我们先来看重载的例子:
public class OverloadParent{
public String getPerson(String name){
return “personA” + name;
}
public String getPerson(int age){
return “personB” ;
}
public String getPerson(String name,int age){
return “personC”;
}
public void getPerson(String name){
System.out.println(“我是重载的方法吗?”);
}
}
public class OverloadChildextends OverloadParent {
public void getPerson(double money){
Sytem.out.println(“我是重载的方法吗”);
}
}
注意观察:
(1)OverloadParent中有4个名字相同的方法
(2)前三个方法的参数类型和个数不一致,返回值一致,构成重载
(3)方法4与方法1仅仅返回值不一样,不构成重载,编译器不通过。
ps:返回值是方法执行后的结果,我们在调用方法的时候不会指定说“我要调用返回值是xxx类型的方法”,它不成成为方法重载的特征。
(4)OverloadParent继承了Demo,Demo中拥有的方法,它都拥有了。它觉得现有的方法满足不了需求,索性重载了一个。
重载的标志:方法名相同,参数不同(个数或者类型),与返回值无关。
再来看一个覆写的例子:
public class OverrideParent{
public void fly(){
System.out.println(“Ican fly!”);
}
}
public class OverrideChild extends OverrideParent{
@override
public void fly(){
System.out.println(“Ican't fly, but I can run!”);
}
public static vid main(String[] args){
OverwriteParent child= new OverwriteChild();
child.fly();
}
}
执行OverrideChild的main方法,会输出什么呢?
答案是:I can'tfly, but I can run!
我们看到:
(1)OverrideChild和OverrideParent都有一个fly方法
(2)fly的返回值和修饰符都一样,只有方法体不一样
(3)子类的fly方法前有一个@overwrite的注解,jdk1.5出现的,仅用于类的继承,1.6可用于接口实现。这个注解有助于编译器检查,不加也可以的。
覆写的标志:子承父类,对相同的方法有不同的实现。
应用场景
重载:当方 * 能相似,但需要传递不同的参数。
覆写:子类有自己特有的行为,从父类继承而不能满足自身需要时。
ps:重载和覆写都是多态的表现。前者是编译器多态,后者是运行期多态。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


猜你喜欢
- 一、总体概述官方文档:https://docs.devexpress.com/WindowsForms/8117/controls-and-
- 1.SpringBoot整合JDBCTemplate1.1.导入jdbc相关依赖包主要的依赖包:<dependency> &nb
- 前言项目流程图如下:这里我们通过:163邮箱来实现激活码发送qq邮箱来进行接收学习之前需要掌握的知识springboot的基本使用方法mys
- 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三
- 概述对List进行分组是日常开发中,经常遇到的,在JDK 8中对List按照某个属性分组的代码,超级简单。package test;impo
- 前言这里介绍一个.net自身携带的类ImageAnimator,这个类类似于控制动画的时间轴,使用ImageAnimator.CanAnim
- 上一篇文章实现了微信登录的移动端功能,下面继续完善功能,实现微信登录服务端功能服务端登录功能实现在以往文章里已经实现了服务端mvc框架,而登
- 前端模板框架为Bootstrap,系统分为前台和后台。后台主要为管理员角色,功能有:商品类型管理、商品管理、订单管理、会员管理、管理员管理等
- 调研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技术 编译时注解,个人想法是一口吃不成胖子,先
- 1、@RequestMapping@RequestMapping 既可以用在类级别,也可以用在方法级别,当它定义在类级别的时候,标明该控制器
- 一,为什么说是真正的 * ?阐述这个问题前,先说下之前网上的,各位可以复制这段字,去百度一下 "仿微信打开网页的进度条效
- 首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。下面对类库使用的封装方法:得到指定的输入流的ZIP压
- 打包与运行在项目开发完成之后,可以直接用IDEA将其打包成JAR包运行,也可以打包成WAR包运行以便在多服务器、多配置环境下运行。双击cle
- 一、本地仓库初始化与远程仓库推送操作Idea 基本环境配置Github 配置Git 执行文件目录指定创建工程git02创建本地仓库并提交项目
- ImageCacheconst int _kDefaultSize = 1000;const int _kDefaultSizeBytes
- 什么是 Intent ?Intent是Android开发中一个非常重要且常用的类,Intent是一个消息传递对象,可以用来从其他应用组件请求
- 前言基本语法首先我们要知道java的基础语法。1.由26个英文字母大小写,0-9,_或$组成2.数字不可以开头3.不可以使用关键字和保留字,
- public class FileAccess{//储存所有文件夹名private ArrayList dirs;public FileAc
- 在你布局或者组件混用的时候你可能会发现 gridview 的九宫格没有完全在页面上显示,只是显示了一个局部(第一行)只有一个滚动条,还不能上
- 一、使用spring initializr创建java工程 1、启动IDEA,新建java工程,使用向导创建一个springboo