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); //输出接口中的常量
}
}
<p>楼主所示的JAVA代码没错。用 <img height="189" src="https://oscimg.oschina.net/oscnet/ac2d557124095ac505fbef0174a5719e923.jpg" width="843">编译、运行都在掌控之中,不会报错。</p>
<p>default方法是Java8提供的新特性,如果你的Eclipse使用的jdk低于8,或者配置工程Java语法检查低于javase-1.8,那么可能会出现这个错误,一个Java Compile配置界面如下图。</p>
default和public不能同时修饰 java8接口写只能用default
<p>含有抽象方法的类,必定是冠以关键字 abstract 的抽象类。极端情况,如果在一个类的定义中,包含的全部是抽象方法,那就只有是接口 interface。换言之,接口就是抽象类的极端情况。但是,这种说法,仅在 jdk1.8之前,成立。<br> jdk 1.8 对接口又有了新规定:可以包括 冠以 关键词 default 的 缺省/默认方法。换言之,jdk 1.8 允许 给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。</p>
楼主的接口 interface interfaceA 里含有 缺省/默认 default 的带方法体的方法 otherprint(),编译报错。那楼主一定用的是 jdk1.8 之前的版本来编译的。
比如下列代码,如果用jdk1.8以前的版本编译,就通不过。我用jdk1.8,就会成功通过编译,并顺利运行。
interface A {
default void print(){
System.out.println("顺应天意");
}
void print1();
}
public class T implements A {
public void print1(){
System.out.println("了却凡尘 ");
}
public static void main(String[] args) {
T t = new T();
t.print();
t.print1();
}
}
输出:
D:\java\test\OS_China>javac T.java
D:\java\test\OS_China>java T
顺应天意
了却凡尘
D:\java\test\OS_China>java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
D:\java\test\OS_China>
<p>jdk环境问题,检查eclipse的编译环境,工程jdk版本,或者用maven的话pom里的编译插件等等;代码在jdk8+是没有问题的</p>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。