java中的通用接口方法实现

问题描述 投票:9回答:4

我有2个实现特定接口的类。 我想实现一个由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();
    }
}

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

谢谢

java interface java-8 static-methods
4个回答
7
投票

是的,如果您使用的是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();
}

3
投票

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

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

interface DM {

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

}

0
投票

首先,interface不是一个阶级。接下来,是的,使用java 8的default methods,您可以向接口添加方法定义,


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");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.