Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么所有的接口方法都需要在用java实现的类中实现_Java_Interface - Fatal编程技术网

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

为什么所有的接口方法都需要在用java实现的类中实现,java,interface,Java,Interface,我知道这是接口的目的,类可以被声明为抽象的,以逃避它 但是实现我们在接口中声明的所有方法有什么用处吗?如果我们继续定义所有的方法,即使它与该类无关,这不会增加代码的重量和复杂性吗?为什么它被设计成这样?您所批评的正是接口实现的目标。 如果不想实现接口,请不要声明实现接口的类 如果我们 继续定义所有方法,即使它与此无关 上课 当您针对一个接口编程时,您希望它背后的具体对象实现它的所有方法。如果您的具体对象不需要或无法实现所有接口方法,您可能需要解决一个设计问题。当任何代码段在不知道其背后是什么类的

我知道这是接口的目的,类可以被声明为抽象的,以逃避它


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

您所批评的正是接口实现的目标。 如果不想实现接口,请不要声明实现接口的类

如果我们 继续定义所有方法,即使它与此无关 上课


当您针对一个接口编程时,您希望它背后的具体对象实现它的所有方法。如果您的具体对象不需要或无法实现所有接口方法,您可能需要解决一个设计问题。

当任何代码段在不知道其背后是什么类的情况下接收接口实例时,应该确保该代码段能够调用接口中的任何方法。这就是使接口成为调用方和功能提供者之间的契约的原因。实现这一点的唯一方法是要求实现接口的所有非抽象类为其所有函数提供实现

有两种通常的方法来处理不实现某些功能的需要:

  • 添加一个tester方法和一个抛出
    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;
    }
}
public interface Part1 {
    void Optional1();
}
public interface Part2 {
    void Optional2();
}
public Impl implements Part1 {
    public void Optional1() {
        System.out.println("Optional1");
    }
}
以下是第二种方法的示例:

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;
    }
}
public interface Part1 {
    void Optional1();
}
public interface Part2 {
    void Optional2();
}
public Impl implements Part1 {
    public void Optional1() {
        System.out.println("Optional1");
    }
}
这可能取决于

因此,使用
A实现B
意味着当需要
B
时,可以使用
A
,并且为了使其正常工作,
A
必须至少具有与
B
相同的方法

请记住,我的答案不是“正确的”,因为它不是基于官方来源

如果我们 继续定义所有方法,即使它与此无关 上课

是的,你是对的。这就是为什么在编码中遵循建议不要强制客户机实现他们不使用的接口的最佳实践。因此,您永远不应该有一个包含许多方法的“fat”接口,而应该有许多小型接口分组方法,每个分组服务于特定的行为或子模块。

这样,接口的客户机只实现所需的方法,而不会被迫实现他们不需要的方法

Java中接口的概念非常类似于契约(回想起来,这可能就是这个概念的名称)

其思想是,实现接口的类庄严承诺提供合同中列出的所有内容,从而保证实现接口的类的任何使用都能提供该功能


根据我的经验,这个工具是可以用Java构建大教堂的工具之一。

在实现接口时,我们可能不需要定义接口中声明的所有方法。我们可以定义一些我们不需要的方法,身体里什么都没有。

我可以理解,但我的想法是,为什么它在java中工作得如此好,以便在一个接口中实现所有方法?如果你能引用一个实时的例子,将是非常完整的。你现在应该知道我是一个newbie@Deepak如果您正在寻找一个带有可选方法的接口的真实示例,请看一下Java的接口。除了检查列表内容的所有操作之外,它还有十个可选操作可以更改列表。否则,界面的意义何在?有时不实现所有方法是有正当理由的,请参阅