java中的常用接口方法实现

Common interface method implementation in java

我有 2 个 class 实现了特定接口。
我想实现一个将由 2 classes.
共享的方法 我可以将该方法实现添加到接口 class,然后从 2 classes 调用该方法吗?

例如:

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

    public class A implements DM
    {
        doSomething();
    }

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

这可行吗?
这样做的正确方法是什么?

首先,interface 而不是 class。接下来,是的,有了java8的default methods,就可以在interfaces,

中添加方法定义了

是的,如果您使用的是 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 而不是接口,并让您的实现 classes extend 而不是 class。界面中任何您不想为其编写默认值的方法都应标记为 abstract.

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

public class A extends DM
{
  doSomething();
}

如果您想使用接口但不能使用默认值,您也可以结合使用这些方法t/won:

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

public class A extends DM
{
  doSomething();
}

您可以使用 Java 8 创建一个 default 方法。它有一些限制,但对某些常用共享功能很有用。

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

interface DM {

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

}

你可以试试这个

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");
    }
}