为了账号安全,请及时绑定邮箱和手机立即绑定

请问try {} catch(){}语句中的f调用的为什么是子类中的方法?

请问try {} catch(){}语句中的f调用的为什么是子类中的方法?

慕妹3146593 2022-02-18 17:11:28
package com.softeem.exceptions;import java.io.IOException;public class FatherException {public void show() throws IOException{System.out.println("父类");}}package com.softeem.exceptions;import java.io.IOException;public class SonException extends FatherException{//需将父类中的方法覆盖//覆盖时 如果父类方法抛出异常 但子类没有 则没有覆盖// 若想要覆盖父类方法 则同样要抛出异常// 在子类 中抛出的异常要么和父类抛出的相同 要么是父类抛出异常的子类public void show(){System.out.println("子类");}public static void main(String args[]){FatherException f=new SonException();try {f.show();} catch (IOException e) {e.printStackTrace();}}}
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

代码里面你的子类覆盖了父类的show()方法,你用一个父类的引用指向一个子类的对象,如果子类中覆盖了父类的show()方法,你就只能用子类覆盖过的show()方法!
这个问题分几种情况,现在就按情况来分析一下:
1、在子类中调用父类中被子类覆盖的方法:
这个情况就是您说的用super来显示的调用。因为在子类中还有一个和父类同样的方法,如果你只写方法名子,编译器不可能知道你想要掉的是哪个方法,他自作聪明的回去调用子类当中的那个。所以这种情况下,你要用super来显示的说明你要调用的是父类中的方法!
2、在其他类中的调用父类方法:
这种情况就在简单不过了。你创造(New出来的!)的是哪类对象(父类对象或是子类对象)他就会去调用父类或是子类中的相应的方法,这个和多态不冲突!
3、静态方法:
静态方法的调用是和类绑定的,类的静态方法又叫类方法,也就是这个方法是属于这个类的,而不是属于这个类创建出来的某个对象的。所以静态方法的调用要用“类名.静态方法名”来调用! 对了,静态方法的调用是需要在另外一个静态方法中的哦,否则编译会错误的!

查看完整回答
反对 回复 2022-02-21
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

FatherException f=new SonException(); - 将子类向上转型为父类,对于上转型对象,若子类复写了父类的方法,则仍然调用的是子类方法。
从更本质的角度来说,对于类里面的非静态方法,默认会传入this参数,于是在方法里访问其他非静态方法时,实际这些被访问的方法前面会有默认带上this,表示这个方法归属于哪个对象。

你可以在FatherException f=new SonException();下面加上这行代码:
System.out.println(f);
就知道f所表示的实际对象了。

查看完整回答
反对 回复 2022-02-21
  • 2 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号