2017-08-10 84 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)),所以它不能是一個功能接口。

相關問題