有可能有一个具有抽象和完整方法的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();
    }
}