将我的C ++代码转换为Java:翻译多重继承

时间:2014-05-09 22:55:53

标签: java c++ oop inheritance

使用Java的第一天。非常基本的问题:我有三个基类,由许多类多次继承。这些基类中的每一个都有很多实现,只有很少的抽象方法:

class Consumer { /* lots of stuff */ };
class Producer { /* lots of stuff */ };
class Logger { /* lots of stuff */ };

class A : public Consumer, Producer, Logger {}
...
class Z : public Consumer, Producer, Logger {}

现在我知道我可以将三个基类中的两个转换为接口,并且多继承2个接口并扩展一个类。由于这些基类中的所有实现都没有用,因此复制到许多子类中是没有意义的。

我正在阅读关于代表团或作文的一些内容,我不知道如何在这里应用它。基本上我的思维过程都是通过我的C ++经验形成的。 将我的C ++类结构转换为Java的阻力最小的路径是什么?

如果需要,我可以更多地填写基类,但希望没有必要。

2 个答案:

答案 0 :(得分:3)

  

将我的C ++类结构转换为Java的阻力最小的路径是什么?

拿笔和纸,重新思考你的问题,并使设计更接近Java的工作方式。

没有神奇的规则可以将任何给定的多重继承问题转化为另一个没有它的问题。鉴于这种情况,您可能希望通过创建多个具有彼此引用的类来分离关注点,而您在C ++中只有一个...但是这取决于您正在处理的特定问题,您如何构建层次结构类和接口以及生成的不同类实例如何相互关联。

答案 1 :(得分:2)

您有两种选择:

为Consumer,Producer和Logger创建3个接口,并使类A和Z实现它们。当然,对于每个类,您必须提供实现。如果实现相同,则创建一个更通用的类(它可能是抽象的,您可能不需要实例化它),实现3个接口,然后使类A和Z扩展抽象类。

正如你在帖子中所说的,这个解决方案似乎不适合你的需求,所以使用委托代替,在A和Z类中放入3个新的字段(作为实例变量)的Consumer,Producer和Logger类型(你可以在构造函数中实例化它们,然后放置方法,这些方法是Consumer,producer和Logger方法的包装器。