我有两个实现特定接口的类 我想实现一个由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();
}
}
这可行吗?
这样做的正确方法是什么?
由于
答案 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");
}
}