在Java中使用多态中的抽象类是一种好的/通常的做法吗?

8 java oop polymorphism abstract-class

在所有示例中,我已经看到接口用于实现多态性.现在我们有了抽象类的以下代码

AbstractClass parent = new Child();
Run Code Online (Sandbox Code Playgroud)

这里的人说,

一个常见的论点是多态性只适用于接口而不是抽象类.

我认为他的意思是它们通常是Java中用于多态的接口.我看到很多人发现他的问题很愚蠢,想要网址.这在这里我发现了什么.所以我的问题是在Java中使用多态中的抽象类(如我的例子中 - 因为多态性是非常宽的定义)是一种好的/通常的做法吗?

bla*_*dri 4

最好使用符合合同的最通用的父级;如果接口定义了您需要的所有函数签名,则使用它们而不是实现该接口的抽象类。Bill Venners 与 Erich Gamma 讨论的《设计模式中的设计原则》一文对此进行了详细介绍。

  • 作为一个例子,您可以使用 (java.util)``AbstractList list = new ArrayList()``。但是,使用“List”接口会更好,因为您可以轻松地将实现更改为“LinkedList”或“CopyOnWriteArrayList”,而不会影响其他代码。``LinkedList`` 和 ``CopyOnWriteArrayList`` 不是 ``AbstractList`` 的子类。当接口可用时使用抽象类会使未来的重构变得复杂。 (3认同)