(Java)为什么这段带default方法接口的实现的代码会报错?

顺应天意了却凡尘 发布于 02/05 10:31
阅读 165
收藏 2

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);      //输出接口中的常量
        }
    }

加载中
0
tcxu
tcxu

楼主所示的JAVA代码没错。用 编译、运行都在掌控之中,不会报错。

0
black-star
black-star

default方法是Java8提供的新特性,如果你的Eclipse使用的jdk低于8,或者配置工程Java语法检查低于javase-1.8,那么可能会出现这个错误,一个Java Compile配置界面如下图。

0
C
CpsjohQfstpo
default和public不能同时修饰 java8接口写只能用default
0
tcxu
tcxu

含有抽象方法的类,必定是冠以关键字 abstract 的抽象类。极端情况,如果在一个类的定义中,包含的全部是抽象方法,那就只有是接口 interface。换言之,接口就是抽象类的极端情况。但是,这种说法,仅在 jdk1.8之前,成立。
jdk 1.8 对接口又有了新规定:可以包括 冠以 关键词 default 的 缺省/默认方法。换言之,jdk 1.8 允许 给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。

楼主的接口 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>

 

0
_Code_Monkey_
_Code_Monkey_

jdk环境问题,检查eclipse的编译环境,工程jdk版本,或者用maven的话pom里的编译插件等等;代码在jdk8+是没有问题的

返回顶部
顶部