如果功能接口扩展另一个接口,它仍然是一个功能接口?

时间:2017-08-10 10:38:29

标签: java functional-interface

Java 8 in Action一书由Raoul-Gabriel Urma,Mario Fusco和Alan Mycroft统计:

public interface Adder{
    int add(int a, int b);
}
public interface SmartAdder extends Adder{
    int add(double a, double b);
}
  

SmartAdder不是功能界面,因为它指定了两个   名为add的抽象方法(一个从Adder继承)。

在本书的另一个类似示例中,以下接口称为功能接口。

public interface ActionListener extends EventListener {
     void actionPerformed(ActionEvent e);
}

是什么让第一个例子不是功能界面与第二个例子比较?

2 个答案:

答案 0 :(得分:4)

EventListener是一个空接口,因此扩展它的ActionListener只有一个方法 - public void actionPerformed(ActionEvent e)。因此它是一个功能界面。

另一方面,SmartAdder有两种抽象方法(int add(int a, int b)int add(double a, double b)),因此它不能成为功能界面。

答案 1 :(得分:3)

由于django-jsonfield提供了两个方法定义(即SmartAdder已重载,未被覆盖):

  • add
  • int add(double a, double b);(来自家长)

相反,int add(int a, int b);是标记界面,因此EventListener仅提供一个方法定义,即自己的ActionListener