一尘不染

为什么HTTPServlet是抽象类?有什么功能上的原因吗?

java

HttpServlet是具有所有已实现方法的抽象类。为什么是抽象的?

我得到的最常见答案是,限制的实例化HttpServlet。但是还有其他方法可以执行此操作,例如私有构造函数将限制实例化。

我了解他们遵循模板方法设计模式。如果某些方法是抽象的,那么即使他的业务逻辑不需要它们,用户也将最终实现所有这些方法。

但是,如果HttpServlet不是抽象的,用户仍然可以扩展它并覆盖require方法。

至少从“抽象”一词的字典含义来看,使用所有已实现方法的抽象类对我来说没有任何意义。

是的,可以同时使用抽象方法和具体方法。

但是,如果要对类进行抽象处理,为什么不对子类必须覆盖的那些方法进行抽象处理呢?还是根本不将其声明为抽象?

喜欢doGet()还是doPost()这种情况。


阅读 441

收藏
2020-12-03

共1个答案

一尘不染

为了具有任何有用的行为,预计您将必须重写这些方法。HttpServlet本身没有有用的功能。

将其构造函数设为私有将限制创建子类的能力。

HttpServlet的设计可能并不理想-
在许多页面(尤其是表单)上,GET和POST逻辑应至少部分沿着一条通用路径进行。然而HttpServlet的的设计理念是报价doGet()doPost()等实现接听根据HTTP版本“不支持”的错误。如果您需要返回这样的答案,这些存根对于继承很有用。

总而言之, API /接口 是完整的-但 功能 绝对不是。因此,它被声明为 abstract

2020-12-03