我有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 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();
}
您可以使用Java 8创建default
方法。它有一些限制,但对某些常用的共享功能很有用。
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
interface DM {
default public void doSomething() {
System.out.println("Hi");
}
}
首先,interface
不是一个阶级。接下来,是的,使用java 8的default methods,您可以向接口添加方法定义,
你可以试试这个
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");
}
}