【发布时间】:2017-02-26 23:34:38
【问题描述】:
所以我正在为 OpenGL/GLE 设计一个框架。
我创建了一个“纹理”抽象类。我有 Texture2D 和 TextureCubemap 继承自 Texture。从 Texture2D 我有 RenderTexture,从 TextureCubemap 我有 RenderTextureCubemap。现在这一切都很好,但是 RenderTexture 和 RenderTextureCubemap 有很多相似之处。我想消除他们之间目前的冗余。在其他语言中,这将是多重继承的理想场所,但 Java 不支持这一点。我的第二个想法是接口。这里的问题是我无法为接口方法定义主体,所以它并没有真正让我受益。另一种选择是创建一个“RenderTarget”类并将其添加为成员变量,虽然这可行,但我不喜欢每次我想访问“RenderTarget”中保存的内容时都必须跳过一个成员变量",看起来有点笨重。
我想知道是否有人可以提出更优雅的解决方案。
【问题讨论】:
-
你能添加某种形式的类图的截图吗?描述很好,但图片会更好。
-
从 Java 8 开始,接口可以有
default方法,这些方法可以有主体。 -
@JornVernee 我怀疑这不是
default的正确用例。 -
默认方法仍然具有抽象的核心,并且是 OP 解决方案的一部分,但不是全部。首先,考虑组合而不是继承。很有可能这会解决大部分的问题。其次,Java 确实支持类型的多重继承。这实际上已经足够了。第三,混合组件而不是继承它们自然会导致使用依赖注入 (DI) 以及由此产生的所有美丽魔法。
-
@LewBloch 您指的是我在问题末尾所说的“另一种选择是创建一个“RenderTarget”类并将其添加为成员变量......”?还是我误会了?
标签: java inheritance multiple-inheritance