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

use*_*682 2 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());
   }
}
Run Code Online (Sandbox Code Playgroud)

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

Sub*_*der 7

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

默认方法使您能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码的二进制兼容性.

了解更多有关默认的方法在这里.

java 8 snapshoot版本可用jdk8 Build b129.


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

但它是在编译时处理,获得更多的解释与例如这里

  • +1但是你好!Java需要另一个错误的转向. (2认同)