Hintergrund:
Als Java-Programmierer erbe ich weitgehend (eher: implementiere) von Schnittstellen und entwerfe manchmal abstrakte Basisklassen. Ich hatte jedoch nie wirklich das Bedürfnis, eine konkrete (nicht abstrakte) Klasse zu unterordnen (in den Fällen, in denen ich dies tat, stellte sich später heraus, dass eine andere Lösung wie die Delegation besser gewesen wäre).
Jetzt habe ich das Gefühl, dass es fast keine Situation gibt, in der das Erben von einer konkreten Klasse angemessen ist. Zum einen scheint das Liskov-Substitutionsprinzip (LSP) für nicht triviale Klassen fast unmöglich zu sein; auch viele andere Fragen hier scheinen eine ähnliche Meinung zu wiederholen.
Also meine Frage:
In welcher Situation (falls vorhanden) ist es tatsächlich sinnvoll, von einer konkreten Klasse zu erben? Können Sie ein konkretes, reales Beispiel für eine Klasse geben, die von einer anderen konkreten Klasse erbt, bei der Sie der Meinung sind, dass dies angesichts der Einschränkungen das beste Design ist? Ich bin besonders an Beispielen interessiert, die den LSP erfüllen (oder an Beispielen, bei denen das Erfüllen des LSP unwichtig erscheint).
Ich habe hauptsächlich einen Java-Hintergrund, interessiere mich aber für Beispiele aus jeder Sprache.