【发布时间】:2018-03-27 09:14:07
【问题描述】:
我有一个“声音”类,用于音频引擎。这是一个基本的声音对象,仅包含音频文件的文件路径和用于播放该文件的 Java Clip 对象。
我有几个这个班的子班。例如,一个 LoopSound 有特殊的变量和函数来促进它完成后的声音循环。还有 MultiSound 用于需要同时播放多个实例的音效,并且有自己的一组变量和函数。
当然,可能会有一种声音既想要循环又想要多重,所以我制作了 LoopingMultiSound。
但后来我有了第三个想法,一种可以应用波形来获得振荡音量的声音。
但这意味着,如果我需要一个由这三者组合而成的类,我需要创建该类。这意味着我需要手动创建所有 8 个类。对于我要添加的每个功能,子类数量都会增加一倍,这是不可持续的。
但我不能只是将所有这些函数都堆积到原始的 Sound 对象中,并且只有一个布尔值来说明子类方面是否在线。这会造成很多混乱,并且有点违背继承编程的目的。我的意思是,没有什么能阻止我,这是最简单的解决方案,但也是最不优雅的。
一定有更好的方法。如何动态创建孙类排列?
【问题讨论】:
-
为什么不在这里使用组合而不是继承?
-
什么是组合优于继承?
-
这个词是有利于组合而不是继承,意思是:首先考虑组合,只有在真正需要时才使用继承。
-
只要用谷歌搜索,你就会得到很多想法。
-
我刚刚在谷歌上搜索了 Java 组合,我看到的只是帖子说要这样做而不是继承,而不是它实际上是什么或如何使一个类组合另一个类:\ 这是新事物吗,我从来没有在大学听过一次。
标签: java inheritance multiple-inheritance