我正在研究一个java,而我正处于Abstract的一部分。 我读到了一个奇怪的部分,我有一个抽象类 其中不包含任何abstarct方法。
他们为什么要使用这种课程?
答案 0 :(得分:38)
防止该类的实例化并仅将其用作基类。子类可以使用抽象类中定义的常规方法。
例如,创建AbstractVehicle
的实例没有意义。但是所有车辆都可以重复使用常见的registerMileage(int)
方法。
答案 1 :(得分:7)
执行此操作的常见原因是让abstract
类提供abstract
方法的爆炸式实现,以方便不必实现 all 的子类abstract
方法,只是他们想要的方法 - 剩下的方法仍然会爆炸,但如果不执行这些执行路径则无关紧要。
HttpServlet就是这种模式的一个例子。它具有处理不同请求类型的所有方法的默认实现,但它们都抛出异常。如果子类想要做一些有意义的事情,则必须覆盖这些子类。只要从不调用它们,就可以保留一些不被覆盖的处理程序方法。
答案 2 :(得分:3)
是的,我们可以使用抽象类而不使用任何抽象方法。 没有任何抽象方法的抽象类的最佳示例是HttpServlet
答案 3 :(得分:2)
如果此类扩展了另一个抽象类,并且没有继承抽象方法的实现。
答案 4 :(得分:1)
此类包含其所有继承者的一些通用逻辑,但本身并不代表可用实体(就特定应用而言)
答案 5 :(得分:1)
假设您有一组相关的类,但没有相关(共享)代码,尚未。如果我们让所有这些类扩展一个没有抽象方法的基类,那么如果我们将来所有这些类都没有相同的方法/特性,那么可以通过将它放入基类。因此代码不会重复,它会在所有子类中反映出来,只需将它包含在一个地方即可。
答案 6 :(得分:0)
这些类用于实现可由其他类实现的通用逻辑。使其抽象化可防止实例化它。但是其他类可以继承类及其方法。
答案 7 :(得分:0)
我开发了一个抽象类来防止该类的实例化并仅将其用作基类。因为,这些类型的类用于实现可以由其他类实现的通用逻辑。有时,我对抽象类中的每个方法都有一个默认实现。在这种方式中,它不会强制子类覆盖所有方法,但它也实现了所有需要的东西。这意味着你必须使用这个抽象类重写至少一个方法来制作场景。
答案 8 :(得分:0)
拥有此类的另一个示例是实现创建帮助程序时。这些类用于简化客户端创建对象,这些对象在主题中相关但根据需要分离。从本质上讲,这个创建者类的方法都是静态的,它们也可以被视为实用类。显然,这些类的instatntation是徒劳的,因此abstract
关键字。
最近我遇到的一个例子是来自Sftp
的{{1}}类,它基本上是一种从sftp api中获取对象(例如:适配器,网关)的简单方法。
答案 9 :(得分:-1)
我想不出任何使用它的好理由。它可以用作“标记”,但界面是更好的选择。
答案 10 :(得分:-4)
没有抽象方法的抽象类意味着您可以创建该抽象类的对象。 见我的例子。
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。