我有3个班级(A级,B级和C级)。

A类调用B的一个实例并运行start()。

B类扩展了Thread,因此在调用start()时,将执行run()方法中的所有内容。

在run()线程中,有一个类C的实例。

无论如何,是否允许C类中的方法调用A类中的方法而无需实例化A类的新实例?

由于我无法将A类扩展到B类(因为“ Thread”已经扩展),所以我不知道该怎么做。

很抱歉,我的项目含糊不清,但是我的项目功能太多,太复杂了,无法提供直接的代码示例。

谢谢!

有帮助吗?

解决方案

所以你有 通用标签

您可以传递调用者,这可能很难看,因为您必须将A一直通过B传递到C: 通用标签

或简化,特别是如果B和C没有其他理由: 通用标签

其他提示

这是一个循环依赖关系,以我(谦虚)的观点,这在OOP中是一件非常糟糕的事情。

您必须重构代码以提供A和C的通用类。

最好的方法可能是让类B的开始开始重载以获取参数(A,或者更好的是,由A实现的接口)。然后B可以将其存储以供C检索(如果它是一个内部类),或者将其传递给C的构造函数...

编辑:

尽管评论者提到了重写构造函数将起作用,但它不适合以B已经存在的方式表达的问题参数,因此我的建议是像这样重载start():/ p> 通用标签

此版本不是线程安全的。如果B每次实际上都被实例化,或者C在b启动时被实例化,则B的构造函数可以工作,那么它可以在实例化时传递给C的构造函数。

顺便说一句,由于许多原因,扩展线程通常不如实现可运行线程好。

在Java中利用线程行为的另一种方法是实现Runnable。可以想象,您可以扩展A,实现Runnable,并使用: 通用标签

从OOP的角度看,这看起来很丑陋,但是在某些情况下,这可能是合理的。其他两个答案似乎更合理,但认为可以考虑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top