2016-06-24 192 views
1

我正在學習java,並且對接口繼承感到困惑。例如,從一本書java接口繼承衝突方法

public interface Singer { 
     void sing(); 
     void setRate(double rate); 
     double getRate(); 
    } 

    public interface Player { 
     void play(); 
     void setRate(double rate); 
     default double getRate() { 
     return 300.0; 
     } 
    } 

public interface SingerPlayer extends Singer, Player{ 
     // Override the getRate() method with a default method that calls the 
     // Player superinterface getRate() method 
    @Override 
    default double getRate() { 
      double playerRate = Player.super.getRate(); 
      double singerPlayerRate = playerRate * 3.5; 
      return singerPlayerRate; 
    } 
} 


public class Employee implements Singer, SingerPlayer { 

} 

的書說,員工將繼承SingerPlayer.setRate()方法,因爲它會覆蓋Singer.setRate()方法。

我看不到它覆蓋此方法。

+1

默認情況下,接口中的方法是抽象的,抽象方法不指定正文。所以首先你必須糾正'玩家'界面。 – Kartic

+1

@Kartic接口中的默認方法現在是一件事http://www.tutorialspoint.com/java8/java8_default_methods.htm – jonhopkins

+0

哦,是啊!我的錯。剛剛纔知道。 – Kartic

回答

1

getRate() in SingerPlayer將覆蓋歌手中的getRate()。而SingerPlayer繼承了getRate(),sing()play()

+0

哪個setRate方法會員工繼承? – Tumelo

+0

一個班級必須提供一個機構。並且由於setRate在兩個接口中都是相同的,Employee只需要實現void setRate(double rate)。 – Shiro