有可能有一个具有抽象和完整方法的Java接口吗?
如果我有一个我希望开发人员实现的接口,但我希望他们只覆盖某些方法,而不使用非抽象方法。像下面一样,我希望覆盖有可能有一个具有抽象和完整方法的Java接口吗?,java,interface,abstract,Java,Interface,Abstract,如果我有一个我希望开发人员实现的接口,但我希望他们只覆盖某些方法,而不使用非抽象方法。像下面一样,我希望覆盖getX()和getY(),但我不希望覆盖getXPlusY()。我必须使用一个带有接口的抽象类来完成这项任务吗 public interface Summifier { public int getX(); public int getY(); public int getXPlusY() { return getX() + getY();
getX()
和getY()
,但我不希望覆盖getXPlusY()
。我必须使用一个带有接口的抽象类来完成这项任务吗
public interface Summifier {
public int getX();
public int getY();
public int getXPlusY() {
return getX() + getY();
}
}
听起来像是Java 8中默认方法的作业:是和否。理论上,接口不能有任何实现,因为它定义了一个契约,仅此而已
但是,在Java 8中,他们添加了默认方法,这些方法看起来非常像您在这里需要的方法。在Java 8中,可以通过以下方式完成:
在旧版本的Java中,您必须有一个抽象类来实现此功能。这不会阻止
getXPlusY
被覆盖。该死,如果我的公司只离开Java 6。。。这真是太圆滑了。虽然能够使默认方法成为final会很好,但这是抽象对象编程的进步。您可以只使用一个抽象类来实现它,只需确保您不希望子类重写的任何方法都是final
,例如public final int getXPlusY()
。这将确保子类不能重新定义getXPlusY()
方法。
public interface Summifier {
public int getX();
public int getY();
// Note the default keyword
default public int getXPlusY() {
return getX() + getY();
}
}