2016-05-02 18 views
-1

Ich bin zum Erstellen einer Schnittstelle namens Payable, die eine abstrakte Methode getPayableAmount, die eine doppelte und keine Parameter zurückgibt, hat ich das richtig gemacht? Es scheint viel zu einfach zu sein, richtig zu sein. Sollte es keine Rückmeldung oder etwas geben? wenn ich eine hinzugefügt bekam ich einen FehlerErstellen einer Schnittstelle mit einer abstrakten Methode

public interface Payable 
{ 
    abstract double getPaymentAmount(); 



} 
+0

Methoden in Schnittstellen sind bereits "abstrakt". Sie können einige Implementierungen in der Schnittstelle hinzufügen, indem Sie 'default' Methoden benutzen, aber das ist nur verfügbar wenn Sie Java 8 verwenden: [Standardmethoden] (https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods. html) – Logan

Antwort

1

JLS sagt diese:

9.4 Zusammenfassung Methode Erklärungen:

Zur Kompatibilität mit älteren Versionen der Java-Plattform ist es erlaubt, aber entmutigt, als eine Frage des Stils , to redundant Geben Sie den abstrakten Modifizierer für die in Interfaces deklarierten Methoden an.

Sie müssen auch nicht public für Schnittstellenmethoden angeben.

Siehe documentation for Defining an Interface:

Alle abstrakt, default und statische Methoden in einer Schnittstelle sind implizit public, so dass Sie den öffentlichen Modifikator weglassen.

public interface Payable 
{ 
    double getPaymentAmount(); 
} 

Sie werden eine Implementierung der Schnittstelle benötigen, um tatsächlich die Logik zu implementieren. Zum Beispiel so etwas:

public class PayableImpl implements Payable 
{ 
    double getPaymentAmount() 
    { 
    // actual implementation that returns the payment amount 
    } 
} 
2

Sie brauchen nicht das abstrakt Schlüsselwort in einem Schnittstelle Verfahren zu schaffen. Alle Methoden in einer Schnittstelle sind eine abstrakte Methode. In einer Schnittstelle sind keine konkreten Methoden erlaubt.

Eine abstrakte Klasse sowohl abstrakte Methode und Konkrete Verfahren haben kann. In diesem Zustand müssen wir spezifizieren, ob eine Methode eine abstrakte oder eine konkrete Methode ist.

public interface Payable 
{ 
    double getPaymentAmount(); 
} 

public abstract class Payable 
{ 
    //This is an abstract method. It has to be implemented by the extending class 
    abstract public double getPaymentAmount(); 

    //This is a concrete method. It can be inherited by the extending class 
    private int CalucateSum(int a, int b) 
    { 
     return a+b; 
    } 
} 
+2

Sie benötigen den 'public' Modifier für Methodensignaturen wirklich nicht. Alle Schnittstellenmethoden sind implizit "public". – Logan

+0

Das ist richtig. private Methode in einer Schnittstelle ist überhaupt nicht sinnvoll. Wenn wir eine Schnittstelle implementieren müssen, sollte sie in der Schnittstelle öffentlich sein. :) – Bimzee

+0

Es ist jedoch für die Schnittstelle Header benötigt – Logan

Verwandte Themen