已有101人关注
Java第12章 异常处理的疑问
发表在Java图书答疑 2016-05-22
是否精华
版块置顶:
Java从入门到精通(第3版) 第12章 异常处理 书中第222页有如下描述:
一个方法被覆盖时,覆盖它的方法 必须 抛出相同的异常或异常的子类
我测试发现子类的重写方法并非必须如此,可以不抛出异常,但是不能抛出父类方法的异常以外的异常。
请问是我弄错了  还是书上写的错了   代码如下:

public class Test{
public static void main(String[] args){
A a=new A();
A b=new B();
try {
b.f(-22);
a.f(-22);
} catch (Exception e) {
System.out.println(e);
}
}
}
class A{
void f(int x)throws Exception
{
if(x<0){
throw new Exception("不能为负数");
}
System.out.println(x);
}
}
class B extends A{
void f(int x)
{
System.out.println(x);
}
}
输出结果
-22
java.lang.Exception: 不能为负数

可见子类重写的方法没有抛出异常也可以。
分享到:
精彩评论 1
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2016-05-23
沙发
确切的说应该是子类方法抛出的异常,不能超过父类方法抛出的异常。子类重写方法抛出的异常可以是:
1.父类方法抛出的异常。
2.父类方法抛出的异常的子子异常。
3.无异常,在方法内已将异常处理掉。
如果父类方法抛出的异常是运行时异常,则子类可以抛出任意运行时异常。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照