抽象类扩展了具体类

2022-09-01 10:01:05

我之前了解到抽象类可以扩展具体类。虽然我没有从JAVA设计师那里看到它的原因,但没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您能提供有用的用例吗?我正在努力学习设计模式,我不想错过任何东西。

下面是一个示例:

public class Foo 
{
    public void test()
    {
    }
}

public abstract class Bar extends Foo
{
   @Override
   public abstract void test();
}

答案 1

如果我有一组我想要默认实现的类(因此它们可以从 中扩展),并且我想要强制提供它们自己的实现的那些类的子集(在这种情况下,在子类中使其抽象将强制这样做),这将变得很有用。test()Foo

当然,此示例中的另一种方法是在顶级类中而不是在子类中声明抽象,这就是您通常要执行的操作 - 但是在某些情况下,满足 is-a 继承关系意味着从设计的角度来看,这样做有时更有意义。这是罕见的,但你有时会看到它。test()

顺便说一句,尽管这是一个特例,但请记住,除非另有指定,否则所有类都会隐式扩展。因此,如果包括这种情况,那么扩展具体类的抽象类毕竟不是那么罕见!Object


答案 2

它基本上是有选择地重用一些现有的(遗留的?)代码。

例如:假设有人已经创建了一个具体的C类(当然是完整的实现)。

现在,由于您正在设计一个新系统(具有抽象的A类),并且您分析了现有系统,发现您将拥有一些几乎与具体类C的方法相似的方法。但是您还发现,具体类 C 的某些方法过于具体,您希望在抽象类 A 的具体子类中强制实现这些方法。

因此,它使您能够有选择地选择要重用的方法和不重用的方法。


推荐