扩展层次结构的具体基类

DrY*_*Yap 5 java oop

假设我使用的库提供了以下形状:

class Shape
class Circle extends Shape
class Square extends Shape
Run Code Online (Sandbox Code Playgroud)

但我想介绍红色形状的概念.我无法修改库但我可以创建:

class RedShape extends Shape
Run Code Online (Sandbox Code Playgroud)

然而,这不能轻易扩展到RedCircle因为它不能同时延伸RedShapeCircle.

我不认为装饰器模式在这里工作得很好但是有没有实现这个的技术?

jan*_*pol 1

简短的答案可以在Josh Bloch 的《Effective java》中找到,第 16 条:优先考虑组合而不是继承


编辑:构图是你需要做的,真的。java 不允许多重继承。人们已经尝试过。他们有一些办法。他们正在写有关它的论文。他们甚至使用代码生成工具或代理(在您的情况下不是 jdk 代理,它不能代理类),但没有什么像您可能想要的那样优雅。