Java 为什么GenericServlet声明服务方法?

Java 为什么GenericServlet声明服务方法?,java,jakarta-ee,servlets,abstract-class,Java,Jakarta Ee,Servlets,Abstract Class,我在检查ServletAPI时注意到GenericServlet是一个实现javax.Servlet.Servet接口的抽象类。我想知道,如果接口javax.servlet.servlet中已经声明了一个抽象方法“service(ServletRequest-req,ServletResponse-res)”,为什么GenericServlet类的作者会声明这个抽象方法。有什么想法吗?通用Servlet是抽象类,实现了javax.Servlet.Servlet和javax.Servlet.Ser

我在检查ServletAPI时注意到GenericServlet是一个实现javax.Servlet.Servet接口的抽象类。我想知道,如果接口javax.servlet.servlet中已经声明了一个抽象方法“service(ServletRequest-req,ServletResponse-res)”,为什么GenericServlet类的作者会声明这个抽象方法。有什么想法吗?

通用Servlet是抽象类,实现了javax.Servlet.Servlet和javax.Servlet.ServletConfig接口。 这个类实现了Servlet接口,它提供了Servlet和ServletConfig接口中所有可用方法的默认实现。 service()方法在GenericServlet中仍然是抽象的,这意味着任何扩展通用servlet的servlet都必须提供service()方法的实现。
因为此方法是servlet的完整逻辑所在的主要方法,并且通用servlet如何知道要执行哪个逻辑。如果此方法不是抽象的,那么开发人员可能会让此方法未实现。

不太可能
javax.servlet.servlet
会为
service()
提供默认实现,但如果这样做,
GenericServlet
子类仍将被迫提供自己的实现。这是完全不实现方法和显式地将其标记为抽象方法之间唯一的实际区别。另一个可能的原因是在Java 5中启用
@Override
注释,当时它只允许用于从超类继承的方法,而不允许用于从接口实现的方法。猜得好,@biziclop,但在Java5(2004年9月)出现之前,Servlet2.1(1998年11月)中就已经有了这种方法。可能更早,但Servlet2.1之前的版本没有文档。唯一能够合理回答这个问题的人是Servlet规范的原始作者。如果我猜的话,我最好的猜测是这只是一个小小的疏忽。@BalusC我也不会认为这是真正的原因,但寻找可能的差异很有趣。当添加默认方法时,行为上的差异实际上是非常有用的,对于那些不真正测试你能力的恼人面试测试来说,这是一个很好的测试问题。:)