如果我有一个我希望开发人员实现的接口,但是我希望它们只覆盖某些方法并且让非抽象方法保持不变。如下所示,我希望覆盖getX()
和getY()
,但我希望getXPlusY()
不被覆盖。我是否必须使用带接口的抽象类来完成此操作?
public interface Summifier {
public int getX();
public int getY();
public int getXPlusY() {
return getX() + getY();
}
}
答案 0 :(得分:6)
不,你不能只使用接口来做到这一点。在Java 8中,您可以为方法提供默认实现,但它不能成为最终实现,因此任何实现类都可以覆盖它。
如果您不想强制执行不能覆盖该方法的规则,那么假设您可以使用Java 8,则使用默认方法可以正常工作。如果Java 8不是一个选项,然后任何实现都必须在一个类中完成。
答案 1 :(得分:3)
在Java 8中,这可以通过default methods完成:
public interface Summifier {
public int getX();
public int getY();
// Note the default keyword
default public int getXPlusY() {
return getX() + getY();
}
}
在旧版本的Java中,您必须有一个抽象类来实现此功能。
答案 2 :(得分:1)
听起来像是Java 8中的默认方法的作业:http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
答案 3 :(得分:1)
是和否。从理论上讲,接口不能有任何实现,因为它定义了一个契约而只是那个。
然而,在Java 8中,他们添加了默认方法http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html,它们看起来很像你需要的。