Java中常见的接口方法实现

9

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

例如:

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个回答

7

如果您正在使用Java 8,您可以创建一个默认实现,就像这样:

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

或者,如果它应该是静态的:
public interface DM
{
    static void doSomething() { System.out.println("Hello World");}
}

更多信息请参见Oracle有关该功能的文档
如果您能够对代码进行更广泛的更改,另一种策略是使用抽象类而不是接口,并让实现类扩展该类。您不想为其编写默认值的接口中的任何方法都应标记为抽象
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();
}

2
一种更彻底的模式是从接口 public interface DM 开始 - 创建一个带有公共/共享/默认实现的抽象基类 public abstract class AbstractBaseDM implements DM,然后扩展它 public class A extends AbstractBaseDMpublic class B extends AbstractBaseDM(但是在 Java 8 中,我将在许多这些情况下使用 _default_)。 - Stephen P

3

1
可以工作 - 不过需要注意的是,接口的默认方法实际上旨在确保所有实现类在向接口添加新方法时不会出错。如果您真的需要两个或更多类的通用方法,请考虑抽象类或组合。 - TR1

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

0
首先,interface 不是一个类。接下来,是的,在Java 8中使用 默认方法,你可以向 接口 添加方法定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接