(Java)为什么这段带default方法接口的实现的代码会报错?
package wu;
interface InterfaceA // 定义一个接口
{
public static String INFO = "static final." ; // 全局常量
public void print() ; // 抽象方法
default public void otherprint() // 带方法体的默认方法
{
System.out.println("print default1 methods InterfaceA!");
}
}
class InterfaceAB implements InterfaceA //子类InterfaceAB实现接口InterfaceA
{
public void print() //覆定接口中的抽象方法
{
System.out.println("print abstract methods InterfaceA!");
System.out.println(INFO);
}
}
public class Interfacedefault
{
public static void main(String[] args)
{
InterfaceAB ab=new InterfaceAB(); //实例化子类对象
ab.print(); //调用覆写过的抽象方法
ab.otherprint(); //调用接口中的默认方法
System.out.println(InterfaceA.INFO); //输出接口中的常量
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
jdk环境问题,检查eclipse的编译环境,工程jdk版本,或者用maven的话pom里的编译插件等等;代码在jdk8+是没有问题的
含有抽象方法的类,必定是冠以关键字 abstract 的抽象类。极端情况,如果在一个类的定义中,包含的全部是抽象方法,那就只有是接口 interface。换言之,接口就是抽象类的极端情况。但是,这种说法,仅在 jdk1.8之前,成立。
jdk 1.8 对接口又有了新规定:可以包括 冠以 关键词 default 的 缺省/默认方法。换言之,jdk 1.8 允许 给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。
楼主的接口 interface interfaceA 里含有 缺省/默认 default 的带方法体的方法 otherprint(),编译报错。那楼主一定用的是 jdk1.8 之前的版本来编译的。
比如下列代码,如果用jdk1.8以前的版本编译,就通不过。我用jdk1.8,就会成功通过编译,并顺利运行。
输出:
default和public不能同时修饰 java8接口写只能用default
default方法是Java8提供的新特性,如果你的Eclipse使用的jdk低于8,或者配置工程Java语法检查低于javase-1.8,那么可能会出现这个错误,一个Java Compile配置界面如下图。
楼主所示的JAVA代码没错。用 编译、运行都在掌控之中,不会报错。