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

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

他们为什么要使用这种课程?

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

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

这样做的一个常见原因是让abstract类提供abstract方法的爆炸式实现,以方便不必实现所有 abstract方法的子类,只需要那些他们想要的 – 其余的仍然会爆炸,但它如果不执行这些执行路径将无关紧要。

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

是的,我们可以使用抽象类而不使用任何抽象方法。 没有任何抽象方法的抽象类的最佳示例是HttpServlet

如果此类扩展另一个抽象类,并且没有inheritance抽象方法的实现。

此类包含其所有inheritance者的一些通用逻辑,但它本身不代表可用实体(就特定应用程序而言)

假设您有一组相关的类,但还没有相关(共享)代码。 如果我们让所有这些类扩展一个没有抽象方法的基类,那么如果我们将来所有这些类都没有相同的方法/特性,那么可以通过将它放入基类。 因此代码不会重复,并且它通过将其包含在一个地方而反映在所有子类中。

这些类型的类用于实现可以由其他类实现的通用逻辑。 使其抽象化可防止实例化它。 但是其他类可以inheritance类及其方法。

我开发了一个抽象类来防止该类的实例化,并仅将其用作基类。 因为,这些类型的类用于实现可以由其他类实现的通用逻辑。 有时,我对抽象类中的每个方法都有一个默认实现。 在这种方式中,它不会强制子类覆盖所有方法,但它也实现了所有需要的东西。这意味着你必须使用这个抽象类重写至少一个方法来制作场景。

拥有这样的类的另一个例子是当你实现创建助手时。 这些类用于简化客户端创建对象,这些对象在主题中相关但根据需要而分离。 本质上,这个创建者类的方法都是静态的,它们也可以被视为实用类。显然,这些类的instatntation是徒劳的,因此是abstract关键字。

最近我遇到的一个例子是来自org.springframework.integration.dsl.sftpSftp类,它基本上是一种从sftp api中需要对象(例如:适配器,网关)的简单方法。

我想不出任何使用它的好理由。 它可以用作“标记”,但界面将是更好的选择。

没有抽象方法的抽象类意味着您可以创建该抽象类的对象。 看我的例子。

 abstract class Example{ void display(){ System.out.println("Hi I am Abstract Class."); } } class ExampleDemo { public static void main(String[] args) { Example ob = new Example(){}; ob.display(); } } 

如果在抽象类中编写一个抽象方法,那么它将无法编译。 这意味着如果您在没有抽象方法的情况下创建抽象类,则可以创建该抽象类的Object。