从具体类继承的任何好例子?[已关闭]

背景:

作为一名Java程序员,我从接口广泛继承(更确切地说:实现),有时我设计抽象基类。但是,我从来没有真正觉得有必要对一个具体的(非抽象的)类进行子类分类(在我这样做的情况下,后来发现另一种解决方案,如委派会更好)。

所以现在我开始觉得,几乎没有从具体类继承是合适的。首先,对于非平凡类,里氏替换原理(LSP)似乎几乎不可能满足;这里的许多其他问题似乎也呼应了类似的观点。

所以我的问题:

在哪种情况下(如果有的话),从具体类继承实际上有意义?你能举一个具体的、现实世界的例子,一个从另一个具体类继承下来的类,你认为这是考虑到约束的最佳设计?我对满足LSP的示例特别感兴趣(或者满足LSP似乎不重要的示例)。

我主要有Java背景,但我对任何语言的例子都感兴趣。


答案 1

您通常有一个接口的骨架实现。如果可以在没有抽象方法的情况下提供可扩展性(例如,通过钩子),则最好使用非抽象骨架类,因为您可以实例化它。I

一个例子是转发包装类,以便能够转发到具体类实现的另一个对象,例如启用装饰或简单的代码重用,而不必从 中继承。您可以在 Effective Java 第 16 项中找到这样一个示例,它支持组合而不是继承。(由于版权问题,我不想在这里发布它,但它实际上只是将所有方法调用转发到包装的实现)。CICCI


答案 2

我认为以下在适当的时候是一个很好的例子:

public class LinkedHashMap<K,V>
    extends HashMap<K,V>

另一个很好的例子是异常的继承:

public class IllegalFormatPrecisionException extends IllegalFormatException
public class IllegalFormatException extends IllegalArgumentException
public class IllegalArgumentException extends RuntimeException
public class RuntimeException extends Exception
public class Exception extends Throwable