java 8中的默认方法

She*_*nam -2 java oracle java-8

问题2:以下界面有什么问题?

public interface SomethingIsWrong {
    void aMethod(int aValue) {
        System.out.println("Hi Mom");
    }
}
Run Code Online (Sandbox Code Playgroud)

答案2:它有一个方法实现.只有默认和静态方法有实现(我认为这是错误的,因为界面不能有身体的方法,因为默认它的方法是抽象的).

问题3:修复问题2中的界面.

答案3:

public interface SomethingIsWrong {
    void aMethod(int aValue);
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将aMethod定义为默认方法:

public interface SomethingIsWrong {
    default void aMethod(int aValue) {
        System.out.println("Hi Mom");
    }
}
Run Code Online (Sandbox Code Playgroud)

我在docs.oracle.com找到了这个,我想知道这些是ORACLE提供的正确答案吗?在我看来.

1.在答案2中,写道只有默认和静态方法有实现?

2.在回答3的替代方案中,它给出了aMethod可以定义为默认方法但是接口不能有其中的方法,因为默认接口中的方法是抽象的,我们只能在它的子类中实现它的方法.

请让我知道ORACLE网站是对还是错?

JB *_*zet 11

您正在查看的页面讨论即将发布的Java 8,其中接口可以具有包含实现的"默认"方法,并且还可以具有静态方法.

在Java 8之前,接口方法确实不具有正文,并且接口不能具有静态方法.

  • 哦,太棒了,所以我们不再需要上课了!这会给我们多重继承吗?钻石继承问题?Yeeha! (3认同)
  • *但是如果B和C都提供默认实现,那么它们就会冲突,并且D必须提供一个重写声明,可能使用m体中的语法X.super.m(...)来明确选择一个继承的方法.*因此编译器会在这种情况下抱怨,并强制您选择要使用的实现. (3认同)