一个接口10个方法而我只想实现5个方法,但条件是我们不能使用抽象类



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

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

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

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

最后要注意。 接口上的 100 个方法有点太史诗了。考虑把那个家伙砍成更小的碎片:p

没有解决方案。

Interface的设计方式是,实现类(类除外abstract必须override所有接口方法。

两个选择:

  1. 扩展实现接口的另一个类。而且很简单仅重写要实现的那些方法。
  2. 不要扩展任何其他类。 完全实现这 10 个方法,并为其他方法提供空体实现。

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

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

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

  1. 在单个接口 B 中扩展 X[] 中的所有接口,然后在 Z 中实现它
  2. 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 开始,接口中的方法可以具有默认实现,因此您可以直接在接口中提供空方法实现。

最新更新