关于子类抛出异常的问题,有个地方不太明白

孤独的小鸟 2016-10-10 05:42:45
class A{
public static void method() throws IOException {};
}
class B extends A{
public static void method() throws IOException,RuntimeException {}; //这个不会报错
}
class C extends A{
public static void method() throws IOException,ParseException{}; //这个会报错,什么原因
}

而:IOException , RuntimeException ,ParseException这个三个同属于一个级别的类 都是Exception的直接子类,
为什么会出现上述情况?
...全文
399 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-10-11
  • 打赏
  • 举报
回复
孤独的小鸟 2016-10-10
  • 打赏
  • 举报
回复
引用 7 楼 背西风酒旗的回复:
子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同。 而JAVA的异常分为两类:Checked异常和Runtime异常,不是RuntimeException类及其子类都被称为Checked异常,Checked异常必须显示处理,否则编译无法通过,IOException 和ParseException都是Checked异常,因为ParseException不是IOException的子类,在编译时会报错。而 RuntimeException无需显示抛出,在方法定义时抛出 RuntimeException没有意义,相当于没有,编译不会报错, RuntimeException只需要在适当的地方处理就行。
问了好久,终于知道是什么原因了,大谢!!
孤独的小鸟 2016-10-10
  • 打赏
  • 举报
回复
引用 6 楼 LCL_Ghoul的回复:
1.java限定子类抛出异常不能超出父类的异常。 2.runtimeException及其子类比较特殊,是不受检查的异常
谢谢,原来是这样的!
背西风酒旗 2016-10-10
  • 打赏
  • 举报
回复
子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同。 而JAVA的异常分为两类:Checked异常和Runtime异常,不是RuntimeException类及其子类都被称为Checked异常,Checked异常必须显示处理,否则编译无法通过,IOException 和ParseException都是Checked异常,因为ParseException不是IOException的子类,在编译时会报错。而 RuntimeException无需显示抛出,在方法定义时抛出 RuntimeException没有意义,相当于没有,编译不会报错, RuntimeException只需要在适当的地方处理就行。
Golden_Dog 2016-10-10
  • 打赏
  • 举报
回复
1.java限定子类抛出异常不能超出父类的异常。 2.runtimeException及其子类比较特殊,是不受检查的异常
孤独的小鸟 2016-10-10
  • 打赏
  • 举报
回复
引用 4 楼 wangyin970774934 的回复:
not compatible with 不兼容
为什么不兼容呢?
肃穆丶 2016-10-10
  • 打赏
  • 举报
回复
not compatible with 不兼容
孤独的小鸟 2016-10-10
  • 打赏
  • 举报
回复
引用 楼主 guoxiu520 的回复:
class A{ public static void method() throws IOException {}; } class B extends A{ public static void method() throws IOException,RuntimeException {}; //这个不会报错 } class C extends A{ public static void method() throws IOException,ParseException{}; //这个会报错,什么原因 } 而:IOException , RuntimeException ,ParseException这个三个同属于一个级别的类 都是Exception的直接子类, 为什么会出现上述情况?
import java.io.IOException; import java.text.ParseException;  //导入的是这两个 然后 public static void method() throws IOException,ParseException{};  这一行代码会报错:Exception ParseException is not compatible with throws clause in A.method()
孤独的小鸟 2016-10-10
  • 打赏
  • 举报
回复
import java.io.IOException; import java.text.ParseException; //导入的是这两个 然后 public static void method() throws IOException,ParseException{}; 这一行代码会报错:Exception ParseException is not compatible with throws clause in A.method()
nikyotensai 2016-10-10
  • 打赏
  • 举报
回复
ParseException你导入的哪个? import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;是可以的。 我也不太明白你什么都没有抛什么异常

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧