即使没有任何抽象方法,类也可以是抽象的吗?如果是的是什么用?

时间:2010-01-31 12:01:08

标签: java abstract-class

我怀疑HttpServlet类是一个抽象类,即使类中没有任何抽象方法,所有方法都是具体的。 即使没有任何抽象方法,类也可以是抽象的吗?如果是,是什么用的?

由于

4 个答案:

答案 0 :(得分:18)

HttpServlet的情况下,重点是servlet程序员通常不希望他们的servlet支持所有4种主要的HTTP方法(POST,GET,PUT,DELETE),所以这会很烦人使doGet()doPost()等方法抽象化,因为程序员将被迫实现他们不需要的方法。因此,HttpServlet为除了向客户端返回错误状态代码之外什么都不做的所有方法提供了默认实现。程序员可以覆盖他们需要的方法,而不用担心其余的方法。但实际上使用HttpServlet类本身没有任何意义(因为它没有任何用处),所以它是abstract

你有一个很好的例子,说明在没有任何抽象方法的情况下有一个抽象类是否有意义。

答案 1 :(得分:6)

无法实例化抽象类,因此必须将它们子类化才能使用它 在子类中,您仍然可以实现自己的方法或覆盖父方法。

HttpServlet作为独立使用可能没有意义,但它在某个上下文中提供了必要的默认功能。您可以将HttpServlet子类化为此上下文提供服务并访问其功能。

HttpServlet的子类不必实现方法以使其自身的功能有效。

答案 2 :(得分:3)

这是一个意图问题。如果类是抽象的,则无法创建该类的实例 - 仅限于子类。

我对Java并不擅长,但我的猜测是HttpServlet提供了它的方法的默认实现,但是你应该覆盖它们中的一些。拥有该类的非特定实例仍然没有意义,因此它是抽象的,因此编译器会向尝试的任何人提示。

答案 3 :(得分:2)

即使有所有方法的具体实现,将类标记为抽象也会有所帮助,如果您不确定类设计是否完整,或者您是否有可能计划稍后添加某些方法。将已声明为abstract的类更改为以后不抽象的类不会破坏与预先存在的二进制文件的兼容性,而其他方式会破坏兼容性。