我可以在接口中声明正常功能吗?

时间:2014-02-24 07:51:30

标签: java interface java-8

我在oracle网站上学习过Java。在那,我看到像

这样的例子
public class Horse {
   public String identifyMyself() {
      return "I am a horse.";
   }
}
public interface Flyer {
   default public String identifyMyself() {
       return "I am able to fly.";
   }
}
public interface Mythical {
   default public String identifyMyself() {
       return "I am a mythical creature.";
   }
}
public class Pegasus extends Horse implements Flyer, Mythical {
   public static void main(String... args) {
       Pegasus myApp = new Pegasus();
       System.out.println(myApp.identifyMyself());
   }
}

我能写这样的界面吗?我希望我只能在界面中编写抽象函数。那么为什么在oracle网站上他们会举这样的例子?

3 个答案:

答案 0 :(得分:6)

此功能在java 8中可用,它被称为默认方法或防御方法。

  

默认方法使您可以向界面添加新功能   您的库并确保与编写的代码的二进制兼容性   对于那些接口的旧版本。

详细了解默认方法here

java 8 snapshoot版本可用jdk8 Build b129


当人们第一次听到新功能时,有一个常见问题是人们会询问默认方法:“如果该类实现了两个接口,并且这两个接口都定义了具有相同签名的默认方法,该怎么办? ”。

但是在编译期间处理它,使用示例Here

获得更多解释

答案 1 :(得分:1)

在Java 8中,这是可能的。并且,它被称为接口中的默认方法。

  

默认方法使您可以向界面添加新功能   您的库并确保与编写的代码的二进制兼容性   对于那些接口的旧版本。

查看here了解详情

答案 2 :(得分:0)

正如其他SO用户所说,它可以从java 8中获得。

但不然......

不,你不能,在界面中所有的方法都是默认的抽象方法。

希望能帮助。