我在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网站上他们会举这样的例子?
答案 0 :(得分:6)
此功能在java 8中可用,它被称为默认方法或防御方法。
默认方法使您可以向界面添加新功能 您的库并确保与编写的代码的二进制兼容性 对于那些接口的旧版本。
详细了解默认方法here。
java 8 snapshoot版本可用jdk8 Build b129 。
当人们第一次听到新功能时,有一个常见问题是人们会询问默认方法:“如果该类实现了两个接口,并且这两个接口都定义了具有相同签名的默认方法,该怎么办? ”。
但是在编译期间处理它,使用示例Here
获得更多解释答案 1 :(得分:1)
答案 2 :(得分:0)
正如其他SO用户所说,它可以从java 8中获得。
但不然......
不,你不能,在界面中所有的方法都是默认的抽象方法。
希望能帮助。