-4

如果接口A有100个方法,我只想实现接口A的10个方法,但条件是我不能使用抽象类请帮我解决

4

6 回答 6

2

如果接口 A 有 100 个方法,而我只想实现接口 A 的 10 个方法

这不是接口的工作方式。他们是合同。接口中的每个方法都是abstractand public,因此您需要为每个方法提供实现。

现在,如果您使用具有 100 个方法的抽象基类,您可以为其中的 90 个提供默认实现,然后将其他 10 个纯abstract.

最后一点。一个接口上的 100 个方法有点太史诗了。考虑把那个家伙砍成小块:p

于 2013-11-06T06:23:58.480 回答
0

没有解决方案。

Interface被设计成除了类之外的实现abstract类必须override是所有接口方法。

于 2013-11-06T06:23:47.327 回答
0

两种选择:

  1. 扩展另一个实现该接口的类。并且只覆盖您想要实现的那些方法。
  2. 不要扩展任何其他类。完整实现这 10 个方法,并为其他方法提供空体实现。
于 2013-11-06T06:24:43.383 回答
0

也许将这个接口拆分成多个较小的接口是个好主意,如果您真的需要这个大接口,当前的大接口可以轻松扩展所有这些小接口。无论如何,拥有 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 开始,接口中的方法可以具有默认实现,因此您可以直接在接口中提供空方法实现。

于 2013-11-06T06:31:14.237 回答
0

将 100 个方法接口拆分为有意义的小接口X[]并让您要使用的 10 个方法在单个接口中A

现在您的C类可以只实现A,这正是您所需要的。

在要实现所有 100 个接口的Z类中。你有2个解决方案

  1. 在单个接口B中扩展X[]中的所有接口,然后在Z中实现
  2. 在Z中实现所有X[]接口

结论:您需要重组接口并将它们拆分为更小的接口。100 方法接口难以维护,表明设计不佳。

于 2013-11-06T06:33:25.523 回答
0

你可以提供这样的东西

    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");
        }
    };
于 2013-11-06T06:33:47.620 回答