Java方法可以使用参数相同但名称不同的方法实现接口

时间:2018-09-25 15:02:06

标签: java

我在Java中发现了一些很奇怪的东西。假设我有一个接口A:

public interface A{
  public void doSth(int a, int b);
}

然后我还有另一个B类:

public class B{
  public void doSthElse(int a, int b){
    // do sth
  }
}

我发现我可以这样做:

B b = new B();
A a = b::doSthElse;

哪个规则可以解释这种行为?为什么Java允许这种事情发生?

1 个答案:

答案 0 :(得分:0)

您的A接口实际上是一个功能性的接口(虽然通常会有所帮助,但不需要这样注释)。

当您向::对象分配方法引用(带有A)时,它使用A作为功能接口,其实现将是B的{​​{ 1}}方法主体。

换句话说,如果您调用doSthElse,它将使用您的参数运行a.doSmth

具有lambda表达式的等效项是:

b.doSthElse
  • 有关功能界面here的一些文档。
  • 有关方法引用here的一些文档。