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

发布于 2022-01-04 05:08:19 字数 2225 浏览 819 评论 5

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

岁吢 2022-01-08 05:57:38

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

能否归途做我良人 2022-01-08 05:33:28

含有抽象方法的类,必定是冠以关键字 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:javatestOS_China>javac T.java

D:javatestOS_China>java T
顺应天意
了却凡尘

D:javatestOS_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:javatestOS_China>

 

臻嫒无言 2022-01-08 05:09:17

default和public不能同时修饰 java8接口写只能用default

勿忘初心 2022-01-08 04:01:09

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

毁梦 2022-01-05 23:30:09

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文