Java:强制要求实现接口继承抽象类

8

我有几个类实现了接口MyInterface,我想让它们都继承抽象类MyAbstractClass。最好的方法是什么?

除了创建另一个继承MyAbstractClass并实现MyInterface的抽象类之外,还有更好的方法吗?

(我发帖前真的没有找到类似的问题)


那是唯一的方法。希望如此 :) - Jayan
1
不,那种方式听起来像是最好的方式。或者在你的文档中要求它。你为什么想要这种行为? - noisecapella
noisecapella 我有几个类实现了我的接口“Listener”,我希望它们都是可观察的。最终,我将“Listener”重写为抽象类,扩展了Observable。 - dpelisek
3个回答

6
您可以定义MyAbstractClass来实现MyInterface接口,然后让所有其他类扩展MyAbstractClass
public abstract class MyAbstractClass implements MyInterface {
    ...
}

public class OneOfSeveral extends MyAbstractClass {
    ...
}

那么接口有什么用处呢? - siebz0r
1
谢谢Jamie,但我不想让每个扩展MyAbstractClass的类都实现MyInterface。(我希望另一种方式是每个实现MyInterface的类都扩展MyAbstractClass) - dpelisek
按照Jamie的方法实现中,可能会有一些只实现MyInterface而不继承MyAbstractClass的类。但是按照我的想法,这个接口真的没用,所以我只需再创建一个抽象类,继承MyAbstractClass并拥有MyInterface中的抽象方法即可。 - dpelisek

6
最干净的解决方案是在接口的JavaDoc中定义这样的要求。在JavaDoc中,应该说明“使用此接口需要扩展MyAbstractClass或提供自己的实现”。这样程序员就负责实现。请记住,这是一个试图通过技术手段解决的社会问题。
另一个“解决方案”是放弃接口并使用抽象类。在抽象类中实现接口在这里没有意义。

另一个“解决方案”是放弃接口并使用抽象类。- 这就是方法。谢谢。如果我有足够的声望,我会投赞成票 :) - dpelisek

0

你不能通过其他方式强制所有具体类扩展MyAbstractClass,除非实际更改它们的定义

class A implements MyInterface

class A extends MyAbstractClass

当然了

abstract class MyAbstractClass implements MyInterface

你不需要再写另一个抽象类。

编辑:关于你下面的评论:“我希望每个 MyInterface 的实现都扩展 MyAbstractClass” - 你无法明确地强制执行这一点。如果你想要,你可以定义另一个接口MyAbstractClassInterface,让MyInterface扩展它,但是你仍然不能强制现有的类扩展实现了这个接口的抽象类,尽管他们当然必须实现这个接口中定义的方法......

听起来你应该放弃接口,用抽象类替代。

祝好!


谢谢。这与Jamie写的相同。但是我不需要任何其他抽象类并不正确。我可能需要来自MyAbstractClass的方法,而不需要来自MyInterface的方法。 - dpelisek
实际上是真的,没有任何阻止你在 MyAbstractClass 中添加(抽象)方法,这些方法在接口中未被定义,并且在你的具体类中实现前者。 - Anders R. Bystrup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接