用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
Java 重写(重点,一定要掌握!)
Java 重写(重点,一定要掌握!)
用户云卷云舒
论坛元老
|
2022-11-15 10:44:50
|
显示全部楼层
|
阅读模式
楼主
主题
1592
|
帖子
1592
|
积分
4776
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
重写的要求:
子类方法的形参列表和方法名必须和父类方法的形参列表和方法名一样
子类方法的返回类型必须是父类方法返回类型或为其子类型。例如父类方法返回类型为Object类,那么子类的返回类型可以是Object,也可以是String
子类方法的访问权限必须大于等于父类方法; (访问权限:public>default>protected>private)
子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。
重写和重载区别
重载(Overload)重写(Override)发生范围本类父子类形参列表形参类型/个数/顺序至少一个不同父子类必须相同返回类型没有要求子类方法的返回类型必须是父类方法返回类型或为其子类型修饰符无要求子类方法的访问权限必须大于等于父类方法
扩展
在调用一个方法时,先从本类中查找是否有对应的方法(this.func(this))
如果没有再到父类中查找是否有对应的方法(super.func(this))
如果仍然没有就要将参数类型转成其父类类型之后再到本类中看是否有对应的方法(this.func(super))
如果仍然没有就再到父类中查找是否有对应的方法(super.func(super))
优先级:从高到低
this.func(this)
super.func(this)
this.func(super)
super.func(super)
复制代码
this和super有点模糊的可以去看一下这篇
this和super关键字
案例
class One{
public void test(One obj) {
System.out.println("调用了One的方法,参数类型是One");
}
public void test(Three obj){
System.out.println("调用了One的方法,参数类型是Three");
}
public void test(){
System.out.println("1111111");
}
public void show(){
System.out.println("One show");
}
}
class Two extends One{
@Override
public void test(One obj){System.out.println("调用了Two的方法,参数类型是One");}
// @Override
// public void test(Three obj){
// System.out.println("调用了Two的方法,参数类型是Three");
// }
@Override
public void show(){
System.out.println("Two show");
}
}
class Three extends Two {}
class Four extends Three {}
复制代码
public static void main(String[] args) {
One one = new One();
Two two = new Two();
Three three = new Three();
Four four = new Four();
one.test(one);
// one是One类创造的对象,参数类型是One类,先从One类中找是否有test(One obj)方法,有所以直接调用
// 结果:调用了One的方法,参数类型是One
one.test(two);
// one是One类创造的对象,参数类型是Two类,先从One类中找是否有test(Two obj)方法,
// 没有,所以到One类的父类Object中查看,Object也没有test(Two obj)方法
// 所以对参数进行转型,将Two类转成其父类One,再到One类中找是否有test(One obj)方法,有所以直接调用
// 结果:调用了One的方法,参数类型是One
two.test(three);
// two是Two类创造的对象,参数类型是Three类,先从Two类找是否有test(Three obj)方法
// 没有,所以到Two类的父类One中查看
// 找到One类中有test(Three obj)方法,直接调用
// 结果:调用了One的方法,参数类型是Three
two.test(four);
// two是Two类创造的对象,参数类型是Four类,先从Two类找是否有test(Four obj)方法
// 没有,所以到Two类的父类One中查看
// One类中没有test(Four obj)方法,所以到One类的父类Object中查看,Object也没有test(Four obj)方法
// 所以对参数进行转型,将Four类转成其父类Three
// 再到Two类中找是否有test(Three obj)方法,没有
// 再到Two类的父类One中看是否有test(Three obj)方法,有所以直接调用
// 结果:调用了One的方法,参数类型是Three
One one1 = new Two(); // 引用的是Two对象:父类One的引用指向子类的类型
//Two two1 = new One(); // 反过来不行,子类的引用不能指向父类
one1.test(one1);
// one1是Two类创造的对象,参数类型是Two类,先从Two类找是否有test(Two obj)方法
// 没有,所以找Two类的父类One,看是否有test(Two obj)方法
// 还是没有,所以到One类的父类Object中查看,Object也没有test(Two obj)方法
// 所以将参数类型Two类转为其父类One,再到本类(Two)查找是否有test(One obj)方法,有所以直接调用
// 结果:调用了Two的方法,参数类型是One
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
用户云卷云舒
论坛元老
这个人很懒什么都没写!
楼主热帖
更新:)
更新:)
期末作业C#实现学生宿舍管理系统 ...
揭秘爆款的小程序,为何一黑到底 ...
Nginx 配置和性能调优
送分题,ArrayList 的扩容机制了解吗? ...
解决Kali Linux换国内源后更新失败的问 ...
程序员必学的项目管理知识-敏捷开发 ...
北京动点元宇宙外包团队:微软入局工业 ...
IOS开发
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
备份
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表