克服Java继承限制(意见/建议)

时间:2017-02-26 23:34:39

标签: java inheritance multiple-inheritance

所以我正致力于为OpenGL / GLE设计框架。

我创造了一个"纹理"抽象类。我有Texture2D和TextureCubemap继承自Texture。从Texture2D我有RenderTexture,而从TextureCubemap我有RenderTextureCubemap。现在这一切都正常,但RenderTexture和RenderTextureCubemap都有很多相似之处。我想删除它们之间的冗余。在其他语言中,这将是多重继承的最佳位置,但Java并不支持这一点。我的第二个想法是接口。这里的问题是我无法定义接口方法的主体,因此它并没有真正使我受益。另一个选择是创建一个" RenderTarget" class并将其添加为成员变量,虽然这样可行,但我并不是每次想要访问" RenderTarget"中包含的内容时都必须跳过成员变量的粉丝。看起来很笨重。

我想知道是否有人可以提出任何更优雅的解决方案。

编辑:这是根据请求的图表。 enter image description here

1 个答案:

答案 0 :(得分:0)

实际上,从Java 8开始,您可以在接口中定义方法体,请参阅https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html,这可能是一个解决方案。

正如评论中所建议的,一个好的解决方案是将冗余代码放在不同的类中并将其组合到您的渲染器中(即,创建一个拥有此代码的成员变量)。

另一种可能性,如果适用于此,则将冗余分解为辅助类(不可实例化且仅使用静态方法),并从2个渲染器中轮询其静态方法。