2017-08-10 77 views
2

的Java 8在行动书拉乌尔·加布里埃尔Urma,马里奥·福斯科,和艾伦迈克罗夫特的统计信息:如果功能接口扩展了另一个接口,它仍然是一个功能接口?

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); 
} 

是什么让第一个例子没有功能接口比较第二个例子?

回答

3

由于SmartAdder提供方法定义(即add过载时,未覆盖):

  • int add(double a, double b);,和
  • int add(int a, int b);(来自亲本)

相反地,EventListener是一个标记接口,所以ActionListener只提供了一种方法定义,它自己的actionPerformed

+0

ahh。谢谢,我忽略了参数类型。 – codeme

+0

@codeme欢迎:) – Mena

4

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

另一方面,SmartAdder有两种抽象方法(int add(int a, int b)int add(double a, double b)),所以它不能是一个功能接口。

相关问题