是否可以拥有一个具有抽象和完整方法的Java接口?

时间:2014-09-25 17:13:23

标签: java interface abstract

如果我有一个我希望开发人员实现的接口,但是我希望它们只覆盖某些方法并且让非抽象方法保持不变。如下所示,我希望覆盖getX()getY(),但我希望getXPlusY()不被覆盖。我是否必须使用带接口的抽象类来完成此操作?

public interface Summifier {

    public int getX();
    public int getY();

    public int getXPlusY() { 
        return getX() + getY();
    }
}

4 个答案:

答案 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,它们看起来很像你需要的。