Java中异常的抛出问题
问题:父类中某个方法抛出了某种类型的异常,那么子类在重写(@Override) 该方法时,这个被重写的方法应当抛出哪种类型的异常?
先看例子
下面两段代码是JavaWeb的基础代码,其中HttpServlet
是TestServlet
的父类。
public abstract class HttpServlet {
//......
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//......
}
//......
}
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, EOFException {
//这样重写 HttpServlet 的 doPost() 方法是可以的
//因为异常类 EOFException 是 IOException 的子类
}
}
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws Exception {
/*
这样重写 HttpServlet 的 doPost() 方法不能通过编译
编译时的报如下错误:
'doPost(HttpServletRequest, HttpServletResponse)' in 'edu.stu.service.TestServlet' clashes with 'doPost(HttpServletRequest, HttpServletResponse)' in 'javax.servlet.http.HttpServlet'; overridden method does not throw 'java.lang.Exception'
*/
}
}
结论
一个类若要覆盖父类的方法,那么被覆盖的方法 throws
出来的异常类型只能小于或等于 父类中该方法 throws
出的异常类型。