3 个回答

当初在制定Servlet规范时,让HttpServletRequest继承ServletRequest,可能准备有其他不同于Http的ServletRequest

但Servlet规范发展到今天,似乎所有实现ServletRequest的类都会实现HttpServletRequest,所以这么写问题不是太大。

如果要严格一些,可以写成:

if (!(req instanceof HttpServletRequest) || !(resp instanceof HttpServletResponse)) {
    throw new SerlvetException(...);
}

HttpServletRequest继承自ServletRequest 是子类与父类的关系。
父类转子类原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用。
这里的ServletRequest 本质上原来就是 HttpServletRequest,因为tomcat等web服务器中传来ServletRequest就是HttpServletRequest。
实际上这是一个HttpServletRequest->ServletRequest->HttpServletRequest 的过程

儿子是继承了老爸的东西的。除了你老爸私有的。把老爸的东西强制给儿子,有毛病吗。滑稽

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题