JAVA:接口可以有非抽象方法吗?

时间:2014-11-12 06:04:53

标签: java

当我遇到这个时,我正在浏览Oracle文档:

https://docs.oracle.com/javase/tutorial/java/IandI/override.html

据我所知,JAVA中的接口只能使用抽象方法,但在阅读本文后,我意识到我错了。有人能解释一下在Interfaces中使用非抽象方法的含义吗?

编辑: 在JAVA 1.6中,follwoing给出了错误:

public interface NonAbstractMethods {

    void testNonAbstract(){

    }
}

错误消息:抽象方法未指定正文

4 个答案:

答案 0 :(得分:5)

接口中的默认方法仅在java 8中引入。基本上,如果实现类没有覆盖它,它会为您提供默认实现。

这也增加了好处,如果你重构接口并引入了一个新方法,它就不会破坏现有的实现类。

答案 1 :(得分:2)

Java 8在接口中引入了默认方法的概念。这将是我所知道的与你所描述的最接近的。

以下是默认方法的文档:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

它基本上是继承接口的类的默认行为。

编辑:正如gerrytan指出的那样,它还允许您在界面中添加方法,而不会破坏已经实现它的类。

答案 2 :(得分:1)

示例中指定的接口方法是默认接口方法,这是Java 8中引入的一项功能。 默认方法允许开发人员在不破坏现有接口实现的情况下向接口添加新方法。 在这里阅读更多, https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

答案 3 :(得分:-2)

默认情况下,接口中的方法是公共的和抽象的。抽象方法没有实现。默认情况下,接口中仅允许使用带有实现的静态方法,所有其他方法默认情况下应为公共和抽象。您编写的方法不是具有实现的抽象,也不是静态的,因此它表明Abstract方法未指定主体错误。

注意:接口中的静态方法必须具有实现。

public interface NonAbstractMethods {
   static void testNonAbstract(){
}
}

此代码不会显示错误。