将我的c++代码转换为Java:转换多重继承

Converting my C++ code to Java: Translating multiple inheritance

本文关键字:转换 Java 多重继承 c++ 代码 我的      更新时间:2023-10-16

第一天使用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 {}

现在我知道我可以把三个基类中的两个变成接口,多重继承这两个接口并扩展一个类。不充分是因为在这些基类中的所有实现都没有意义将其复制到许多子类中。

我正在读一些关于委托或作文的东西,我不知道如何在这里应用。基本上,我的思维过程是由我的c++经验形成的。将我的c++类结构转换为Java的阻力最小的路径是什么?

如果需要,我可以填写更多的基类,但希望不是必需的。

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

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

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

你有两个选择:

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

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