java中的通用接口方法实现

时间:2015-11-17 17:56:01

标签: java interface java-8 static-methods

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

例如:

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 个答案:

答案 0 :(得分:6)

是的,如果您使用的是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 DM
{
    public void doSomething() { System.out.println("Hello World");}
    public abstract void doSomethingElse();
}

public class A extends DM
{
  doSomething();
}

如果您想使用界面但不能使用默认设置,您也可以将这些方法结合使用:

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

public class A extends DM
{
  doSomething();
}

答案 1 :(得分:3)

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

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

interface DM {

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

}

答案 2 :(得分:0)

首先,interface 不是类。接下来,是的,使用java 8的default methods,您可以将方法定义添加到 interfaces

答案 3 :(得分:0)

你可以试试这个

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