为什么不使用抽象方法使用抽象类?

hon*_*suk 29 java

我正在研究一个java,我正处于Abstract的一部分.我读了一个奇怪的部分,我有一个抽象类,不包括任何abstarct方法.

他们为什么要使用这种类?

Boz*_*zho 38

防止实例化该类并仅将其用作基类.子类可以使用抽象类中定义的常规方法.

例如,创建一个实例是没有意义的AbstractVehicle.但所有车辆都可以重复使用常用registerMileage(int)方法.

  • +1我认为一个"规范"的例子是`javax.servlet.HttpServlet`,它是`abstract`但没有抽象方法.该类的设计者根本不想让你在web.xml中注册一个`HttpServlet`,因为它根本没用. (14认同)

Boh*_*ian 8

一个常见的理由这样做是有abstract阶级提供爆炸的实现abstract方法是为了方便子类没有实行谁所有abstract方法,只是那些他们希望-其余的依然会爆炸,但它不会如果没有行使这些执行路径,则很重要.

HttpServlet就是这种模式的一个例子.它具有处理不同请求类型的所有方法的默认实现,但它们都抛出异常.如果子类想要做一些有意义的事情,则必须覆盖这些子类.只要永远不会调用一些处理程序方法,就可以保留一些处理程序方法.