2016-06-24 14 views
1

Ich lerne Java und verwirrt über die Vererbung von Schnittstellen. Beispiel aus einem BuchJava-Schnittstelle Vererbung Konfliktmethoden

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 { 

} 

Die Bücher, sagen Mitarbeiter SingerPlayer.setRate() Methode erben werden, weil es die Singer.setRate() Methode überschreibt.

Ich sehe nicht, wo es diese Methode überschreibt.

+1

Standardmäßig sind Methoden in der Schnittstelle abstrakt und abstrakte Methoden geben keinen Rumpf an. Zuallererst müssen Sie die 'Player' Schnittstelle korrigieren. – Kartic

+1

@Kartic Standardmethoden in den Schnittstellen sind eine Sache jetzt http://www.tutorialspoint.com/java8/java8_default_methods.htm – jonhopkins

+0

Oh, yeah! Mein Fehler. Das muss ich gerade wissen. – Kartic

Antwort

1

getRate() in SingerPlayer überschreibt getRate() in Singer. Und SingerPlayer erbt getRate(), sing() und play().

+0

Welche setRate-Methode erbt Employee? – Tumelo

+0

Eine Klasse muss einen Körper bereitstellen. Und da setRate in den beiden Schnittstellen identisch ist, muss der Mitarbeiter nur void setRate (doppelte Rate) implementieren. – Shiro