【发布时间】:2021-03-17 16:34:50
【问题描述】:
我使用一个带有接口的库,IFC,它由三个类 A、B 和 C 实现。
我想自己实现方法 M,它在 IFC 中定义,并在 A、B 和 C 中实现,它应该覆盖 A、B 和 C 中的相应方法。
这可能吗?
在Java 中,你实现,而不是扩展,一个接口,你只能扩展一个类。这使我得出结论,我想做的事情是不可能的。
相反,我需要创建:
class MyA extends A {
myM () {
// Do my stuff
super.M();
}
然后是 B 和 C 的两个相同的类,每个都有相同的 myM 方法,但这感觉真的很笨拙和丑陋。还有其他方法吗?
【问题讨论】:
-
你为什么打电话给
super.M();?有必要吗? -
我没有看到扩展 A、B 和 C 的替代方法。无论如何,如果
//do my stuff对所有三个类都相同,那么您可以编写一个实现//do my stuff的类 D 和在MyA中引用它等等。这至少会集中//do my stuff的实现并减少冗余。 -
也许您想使用代理/适配器来覆盖一种方法并将所有其他方法委托给底层实例。然后,您可以使用它来包装
A、B和C的实例。 -
这个问题是discussed on Meta。
-
看起来像一个 xy 问题:由于某种原因,您没有详细说明,您想更改现有接口/类(即 IFC、A、B、C)的规范 - 这可以'没有完成,如你所知 ;) 可能有一些选项(@Scratte 建议的 fi 仪器或包装器),这取决于你 真正 想要实现的目标......现在我们又回到了失踪细节 ;)。基本上,您必须重新考虑和重新评估您的要求,然后返回缺少的细节。
标签: java inheritance methods overriding overloading