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);
}
是什么让第一个例子不是功能界面与第二个例子比较?
答案 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
。