首页上一页 1 下一页尾页 1 条记录 1/1页
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: 不能为负数
可见子类重写的方法没有抛出异常也可以。
一个方法被覆盖时,覆盖它的方法 必须 抛出相同的异常或异常的子类
我测试发现子类的重写方法并非必须如此,可以不抛出异常,但是不能抛出父类方法的异常以外的异常。
请问是我弄错了 还是书上写的错了 代码如下:
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: 不能为负数
可见子类重写的方法没有抛出异常也可以。