2015-11-17 19 views
6

私は特定のインタフェースを実装する2つのクラスを持っています。私は2つのクラスで共有されるメソッドを実装したいと思います。そのメソッドの実装をインターフェイスクラスに追加し、2つのクラスからそのメソッドを呼び出すことはできますか?例えばのためにJavaの一般的なインタフェースメソッドの実装

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

    public class A implements DM 
    { 
     doSomething(); 
    } 

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

は、この可能ですか?この

おかげで、すべての

答えて

4

のメソッド定義を追加することができますは、Java 8を使用している場合、あなたはこのようなdefault実装、作成することができます。

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

をか、それは静的である必要がある場合:詳細については、

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

参照Oracle's documentation on the feature

あなたのコードにもっと広範な変更を加えることができるならば、もう一つの戦略として、インターフェイスの代わりにabstract classを使用して、そのクラスを代わりにextendのクラスにすることができます。インターフェイスにデフォルトを書きたくないメソッドは、abstractとマークする必要があります。

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

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

を試すことができます - 共通/共有/デフォルトの実装'と抽象基本クラスを作成しますpublic abstract class AbstractBaseDMはDM'を実装し、 'public class A extends AbstractBaseDM'と' public class B extends AbstractBaseDM'を拡張します(ただし、Java 8では多くの場合_default_を使用します) –

+0

@StephenPそれは良い点ですが、私はそれは私の答えです。 –

0

ファーストを行うための適切な方法は何ですか、interfaceクラスではありません。次に、はい。Java 8のdefault methodsで、あなたは、はい、インターフェース

3

あなたはそれがいくつかを持っているのJava 8とdefaultメソッドを作成することができます:あなたはインタフェースを使用したいが、/デフォルトを使用しないであろうことができない場合にもアプローチを組み合わせることができ

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

public class A extends DM 
{ 
    doSomething(); 
} 

いくつかの共通の機能には適しています。

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

interface DM { 

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

} 
+1

- 実際にはインターフェイスのデフォルトメソッドは、インターフェイスに新しいメソッドが追加されたときに、実装されているすべてのクラスが壊れないようにするためのものです。 2つ以上のクラスに共通のメソッドが本当に必要な場合は、抽象クラスまたはコンポジションを考慮してください。 – TR1

0

あなたはより徹底したパターンがインタフェース `パブリックインターフェイスDM`で開始している。この

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"); 
    } 
} 
関連する問題