为什么所有接口方法都需要在java中实现它的类中实现

Dee*_*pak 11 java interface

我知道它是接口的目的,并且可以将类声明为abstract以逃避它.

但是有没有用于实现我们在接口中声明的所有方法?如果我们继续定义所有方法,即使它与该类无关,那么这不会增加代码的重量和复杂性吗?为什么这么设计呢?

Tho*_*sen 22

Java中的接口的概念非常类似于契约(也许回想起来,这应该是概念的名称)

我们的想法是,实现接口的类庄严地承诺提供合同中列出的所有内容,以便保证实现接口的类的任何使用都具有该功能.

根据我的经验,这个设施是使用Java建造大教堂的可能性之一.

  • +10代表'合同'和'承诺':) (4认同)

Hei*_*bug 9

你批评的正是目标界面实现的目标.如果您不想实现接口,请不要声明您的类实现它.

如果我们继续定义所有方法,即使它与该类无关,那么这不会增加代码的重量和复杂性吗?

当您针对接口进行编程时,您希望其背后的具体对象实现其所有方法.如果您的具体对象不需要或不能实现所有接口方法,则可能需要修复设计问题.


das*_*ght 6

当任何一段代码接收到接口的实例而不知道它背后是什么类时,应确保该代码段能够调用接口中的任何方法.这使得接口成为调用者和功能提供者之间的契约.实现这一目标的唯一方法是要求所有实现接口的非抽象类为其所有函数提供实现.

有两种通用方法可以解决不实现某些功能的需要:

  • 添加测试器方法和抛出的实现UnsupportedOperationException,以及
  • 根据需要将界面拆分为零件,以便可以实现零件的所有方法.

以下是第一种方法的示例:

public interface WithOptionalMehtods {
    void Optional1();
    void Optional2();
    boolean implementsOptional1();
    boolean implementsOptional2();
}

public class Impl implements WithOptionalMehtods {
    public void Optional1() {
        System.out.println("Optional1");
    }
    public void Optional2() {
        throw new UnsupportedOperationException();
    }
    public boolean implementsOptional1() {
        return true;
    }
    public boolean implementsOptional2() {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是第二种方法的示例:

public interface Part1 {
    void Optional1();
}
public interface Part2 {
    void Optional2();
}
public Impl implements Part1 {
    public void Optional1() {
        System.out.println("Optional1");
    }
}
Run Code Online (Sandbox Code Playgroud)