如果接口A有100个方法,我只想实现接口A的10个方法,但条件是我不能使用抽象类请帮我解决
6 回答
如果接口 A 有 100 个方法,而我只想实现接口 A 的 10 个方法
这不是接口的工作方式。他们是合同。接口中的每个方法都是abstract
and public
,因此您需要为每个方法提供实现。
现在,如果您使用具有 100 个方法的抽象基类,您可以为其中的 90 个提供默认实现,然后将其他 10 个纯abstract
.
最后一点。一个接口上的 100 个方法有点太史诗了。考虑把那个家伙砍成小块:p
没有解决方案。
Interface
被设计成除了类之外的实现abstract
类必须override
是所有接口方法。
两种选择:
- 扩展另一个实现该接口的类。并且只覆盖您想要实现的那些方法。
- 不要扩展任何其他类。完整实现这 10 个方法,并为其他方法提供空体实现。
也许将这个接口拆分成多个较小的接口是个好主意,如果您真的需要这个大接口,当前的大接口可以轻松扩展所有这些小接口。无论如何,拥有 100 个方法可能太多了,我猜实现它的类的内聚力非常低。
如果一个类只能执行 100 个动作中的 10 个动作,那么它就不会真正尊重契约。想想银行合同。如果您签署了一份收到 10 万美元的文件,但您只有 1 万美元怎么办?它似乎不正确/不正确,是吗?但是,如果你签了一份 10k 的文件,并且按照承诺得到了 10k,你就满意了,对吧?
另一种解决方案是适配器。看看http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html。此类实现所有鼠标侦听器(空方法),如果您只需要 1、2 或仅覆盖几个,您只需扩展此类并实现您需要的那些,但仍然有 3 个较小的接口,而不是一个大的做所有事情。
此外,从 Java 8 开始,接口中的方法可以具有默认实现,因此您可以直接在接口中提供空方法实现。
将 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");
}
};