2015-11-17 6 views
6

Ich habe 2 Klassen, die eine bestimmte Schnittstelle implementiert. Ich möchte eine Methode implementieren, die von den 2 Klassen geteilt wird. Kann ich diese Methodenimplementierung zu der Interface-Klasse hinzufügen und dann einen Aufruf an diese Methode aus den 2 Klassen machen.Gemeinsame Schnittstelle Methode Implementierung in Java

Für zB:

public interface DM 
{ 
    public static void doSomething() { 
     System.out.println("Hello World");} 
    } 

    public class A implements DM 
    { 
     doSomething(); 
    } 

    public class B implements DM 
    { 
     doSomething(); 
    } 
} 

Ist dies möglich? Was ist der richtige Weg ist es, diesen

Dank

Antwort

4

Ja, wenn Sie mit Java 8, hinzufügen können Sie eine default Implementierung wie folgt erstellen:

public interface DM 
{ 
    default void doSomething() { System.out.println("Hello World");} 
} 

oder wenn es sollte statisch sein:

public interface DM 
{ 
    static void doSomething() { System.out.println("Hello World");} 
} 

weitere Informationen finden sie Oracle's documentation on the feature

Eine andere Strategie, die Sie verwenden könnten, wenn Sie umfangreichere Änderungen an Ihrem Code vornehmen können, wäre die Verwendung einer abstract class anstelle einer Schnittstelle, und stattdessen Ihre implementierenden Klassen extend diese Klasse. Alle Methoden in Ihrer Schnittstelle, für die Sie keine Standardwerte schreiben möchten, sollten als abstract markiert sein.

public abstract class DM 
{ 
    public void doSomething() { System.out.println("Hello World");} 
    public abstract void doSomethingElse(); 
} 

public class A extends DM 
{ 
    doSomething(); 
} 

Sie auch die Ansätze kombinieren könnten, wenn Sie Schnittstellen verwenden möchten, aber nicht/wird nicht standardmäßig verwenden:

public abstract class DMImpl impelements DM 
{ 
    @Override   
    public void doSomething() { System.out.println("Hello World");} 
} 

public class A extends DM 
{ 
    doSomething(); 
} 
+2

ein gründlichere Muster wird mit der Schnittstelle 'öffentliche Schnittstelle DM' starten - schaffen eine abstrakte Basisklasse mit gemeinsamem/shared/Standardimplementierungen' public abstract Klasse AbstractBaseDM implementiert DM 'dann erweitern das' öffentliche Klasse A erweitert AbstractBaseDM' und 'öffentliche Klasse B erweitert AbstractBaseDM' (aber mit Java 8 werde ich _default_ für viele dieser Fälle verwenden) –

+0

@StephenP Das ist ein guter Punkt, Ich werde a Das zu meiner Antwort. –

0

Zunächst einmal zu tun, interface ist keine Klasse. Als nächstes ja, mit Java-8s default methods, können Sie Methodendefinitionen Schnittstellen,

3

Sie können mit Java eine default Methode erstellen 8. Es hat einige Einschränkungen, aber gut für einige häufig geteilte Funktionalität.

https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

interface DM { 

    default public void doSomething() { 
     System.out.println("Hi"); 
    } 

} 
+1

Funktioniert - obwohl beachten Sie, dass Standardmethoden für Schnittstellen tatsächlich sicherstellen soll, dass alle implementierenden Klassen nicht brechen, wenn eine neue Methode zu einer Schnittstelle hinzugefügt wird. Wenn Sie eine gemeinsame Methode für zwei oder mehr Klassen benötigen, betrachten Sie eine abstrakte Klasse oder eine Komposition. – TR1

0

können Sie versuchen, dieses

interface DM 
{ 
    public void doSomething(); 
} 

class A implements DM 
    { 
     public void doSomething() 
     { 
      System.out.println("Hello World"); 
     } 
    } 

class B implements DM 
    { 
     public void doSomething() 
     { 
      System.out.println("Hello World"); 
     } 
    } 
class Test111 
{ 
    public static void main(String args[]) 
    { 
     System.out.println("Hello"); 
    } 
} 
Verwandte Themen