重载和重写的区别。。。。
1. 参数列表:必须与被重写方法的参数列表完全匹配。
2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同
3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱。
4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。
5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常
6. 不能重写标志为final,static的方法
重载方法的规则:
1. 参数列表:被重载的方法必须改变参数列表。
2. 返回类型:可以改变返回类型。
3. 修饰符:可以改变修饰符
4. 异常:可以声明新的或者更广泛的异常。
- class Animal {
- public void eat(){
- }
- }
以下列出对于Animal的eat方法各种重写重载实例,根据以上列出的规则,判断其是否合法(以下的方法都属于Animal的子类Horse的方法):
1. private void eat(){} 不能通过编译,非法重写,访问修饰符限制性变强;不属于重载,因为参数列表没有发生改变
2. public void eat() throw RuntimeException{} 能通过编译,属于重写,重写方法可以抛出任何非检查异常。
3. public void eat() throw IOException{} 不能通过编译,非法重写,重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常;不属于重载,参数列表必须发生变化才属于重载
4. public void eat(String food){} 能通过编译,不是重写;合法重载,因为参数列表发生改变了。
5. public String eat(){} 不能通过编译,不是重写,因为其返回类型;不是重载,因为参数列表没有发生改变。
6. public String eat(int n){} 可以通过编译,不是重写;是重载,首先参数列表必须发生变化,返回类型可以发生改变。
对父类被重写的方法做一个变动:
- class Animal {
- public Animal eat() throws IOException{
- return null;
- }
- }
7. public Animal eat(){return null;} 可以通过编译,合法重写,可以不抛出异常,只要不抛出新的异常或更广泛的异常就可以。
8. public Animal eat() throws FileNotFoundException{return null;} 可以通过编译,是重写,属于子类的非检查异常。
9. public Animal eat() throws Exception{} 不可以通过编译,非法重写,抛出了更广泛的异常。
10. public Horse eat() {} 可以通过编译,是重写,因为返回类型可以是被重写的返回类型的子类。
1 重载(Overloading)
(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时
存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具
有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型
来决定具体使用哪个方法, 这就是多态性。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同
也可以不相同。无法以返回型别作为重载函数的区分标准。
2 重写(Overriding)
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某
方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,
子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不
动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又
称方法覆盖。
(2) 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,
则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键
字引用了当前类的父类。
(3) 子类函数的访问修饰权限不能少于父类的;
总结:重载和重写(覆盖)。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写
Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性
的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法
被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而
言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和
父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同
名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
(Overloading)。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回
值类型可以相同也可以不同。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhu_apollo/archive/2007/10/28/1852542.aspx
重载和重写的区别。。。。相关推荐
- C++中重载与重写函数区别及虚函数(转载)
C++中重载与重写函数区别及虚函数 C++中的虚函数(virtual function) 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的 ...
- java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
目录 重载与重写的概念 重载与重写的区别 重载与重写的总结 构造器是否能被重写override 为什么函数不能根据返回类型来区分重载 重载与重写的概念 重载:同样一个方法可以根据输入参数列表的不同,做 ...
- 开课吧-Java常见面试题:重载和重写的区别?
重载和重写的区别? 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性. 重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同.个数不同.顺序 ...
- C#重载和重写的区别
C#重载和重写的区别 重载就是在同一个类中,方法名相同,参数列表不同.参数列表不同包括:参数的个数不同,参数类型不同等. 重载特征: I.方法名必须相同 II.参数列表必须不相同,与参数列表的顺序无 ...
- 继承、多态,重载、重写的区别与总结
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- JAVA中重写和实现的区别_Java中重载和重写的区别
Java中重载和重写的区别 1.1重载是什么 Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型 1.2为什么用重载 重载 ...
- 重载和重写的区别有哪些?
重载和重写的区别有以下几点: 一.定义上的区别: 1.重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的时候根据函数的参数来区别不同的函数. 2.覆盖(也叫重写)是指在派生类中重 ...
- C#重载与重写的区别
前言:在之前的博文中,我总结过重载与重写的区别与用法,本博文算是一个系统的概述与总结. 文章目录 一.重载与重写的区别 二.重载与重写的特征 三.重载与重写的对比 一.重载与重写的区别 重载必须在同一 ...
- java中重载与重写的区别
最近了解一下重载和重写 一.重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading ...
- 二十三、Java类中重载和重写的区别
@Author:Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...
最新文章
- .exp文件_exp及expdp的主要区别及常用的导入导出操作
- php domdocument getattribute,PHP DOMElement getAttribute()用法及代码示例
- SonarQube4.4+Jenkins进行代码检查实例之三-单元测试分析
- python 百度百科 爬虫_python简单爬虫
- 支付宝支付系统繁忙,请稍后再试(ALI64)错误解决
- Mac使用sdkmanager从官网下载新版android SDK
- 开启MySQL的binlog日志
- 客户管理软件系统源码
- 总结:Oracle 递归查询
- 等级保护三级基本要求
- 大觉寺-阳台山穿越记
- grpc原理及四种实现方式
- 想要制作出好看的软蜡笔画?来看这份JixiPix Pastello Pro操作指南!
- graphpad画生存曲线怎么样去掉删失点_Graphpad 作图教程 | 这份超详细的生存曲线绘制指南,科研新手一看就会!...
- Comet OJ - Contest #5 迫真小游戏
- 如果你的天猫魔盒不能看了
- 拼多多有哪些API?
- 《 QT5.9 c++ 开发指南》各种常见图表的绘制(一个例子让你不再担心表图的绘制)
- 【Maven】你好,Maven >>> 与Maven的初次见面~
- 解决Mac无法关闭80端口,无法将hosts域名指向本地80端口