如果一个接口A有100个方法,而我只想实现接口A的10个方法,但条件是我不能使用抽象类请帮我解决
如果接口 A 有 100 个方法,而我只想实现 10 个方法 接口 A 的方法
这不是接口的工作方式。它们是合同。接口中的每个方法都是abstract
和public
的,因此您需要为每个方法提供实现。
现在,如果您使用具有 100 个方法的抽象基类,则可以为其中的 90 个提供默认实现,然后将其他 10 个纯abstract
。
最后要注意。 接口上的 100 个方法有点太史诗了。考虑把那个家伙砍成更小的碎片:p
没有解决方案。
Interface
的设计方式是,实现类(类除外abstract
必须override
所有接口方法。
两个选择:
- 扩展实现接口的另一个类。而且很简单仅重写要实现的那些方法。
- 不要扩展任何其他类。 完全实现这 10 个方法,并为其他方法提供空体实现。
将 100 个方法接口拆分为有意义的小接口 X[],并让要使用的 10 个方法位于单个接口 A
中现在你的C类可以只实现A,这正是你需要的。
在要实现所有 100 个接口的 Z 类中。您有 2 个解决方案
- 在单个接口 B 中扩展 X[] 中的所有接口,然后在 Z 中实现它
- 在 Z 中实现所有 X[] 接口
结论:您需要重构接口并将它们拆分为较小的接口。 100方法接口难以维护,表明设计不良。
你可以提供这样的东西
Iterator i = new Iterator() {
int[] a = {1,2,3};
int i = 0;
@Override
public boolean hasNext() {
return i < a.length;
}
@Override
public Object next() {
return a[i++];
}
@Override
public void remove() {
throw new UnsupportedOperationException("Not implemented");
}
};
接口拆分为多个较小的接口是个好主意,如果您真的需要这个大接口,当前的大接口可以轻松扩展所有这些小接口。无论如何,拥有 100 个方法可能太多了,我想实现它的类的内聚力非常低。
如果一个类只能执行 100 个动作中的 10 个,那么它就没有真正遵守契约。想想银行合同。如果您签署了一份收到 100k $ 的文件,但您只获得了 10k $ 怎么办?这似乎不正确/正确,是吗?但是,如果您签署了一份 10k 的论文,并且您按照承诺获得了 10k,那么您就满意了,对吗?
另一种解决方案是适配器。看看 http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html.这个类实现了所有的鼠标侦听器(空方法),如果你只需要 1、2 或只是几个被覆盖,你只需扩展这个类并实现你需要的那些,但仍然有 3 个较小的接口,而不是一个大的接口来做所有事情。
此外,从 Java 8 开始,接口中的方法可以具有默认实现,因此您可以直接在接口中提供空方法实现。