博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8对接口的改变
阅读量:6294 次
发布时间:2019-06-22

本文共 2843 字,大约阅读时间需要 9 分钟。

hot3.png

一、java8对接口的改变

    1、增加了default方法和static方法,这两种方法完全可以有方法体。

    2、default方法属于实例,static方法属于类(接口)。

    3、接口中的静态方法不会被继承,而静态变量可以被继承。

    4、如果一个类实现了多个接口,并且这些接口之间没有继承关系,同时又存在相同的默认方法,

        会报错:不相关默认值;
        如果多个接口有继承关系,默认方法会被子接口覆盖。

    5、如果遇到一个类实现了多个接口,这些接口之间没有继承关系,但是存在相同的默认方法,实现 类可以通过特殊的语法指定要访问那个接口的默认方法

       在实现类(或子接口)中重写默认方法,在方法里面写:
       <接口名>.super.<方法名>([参数]);
       示例:
        
        public void test2() {
            TestInter2.super.test2();
        }

    6、如果一个接口只有一个抽象方法(包括继承的),该接口是一个函数式接口,函数式接口可以使用Lambda表达式实现。

    7、如果接口里面使用FunctionalInterface注解,限定接口里面只能有一个抽象方法。

二、代码描述

    1、TestInterfaceMain.java

/** * @Title: TestInter.java * @Package com.lty.java8 * @Description: TODO* @author Liu * @date 2017年12月17日 上午11:40:05 * @version V1.0 */package com.lty.java8;/** * @ClassName: TestInter * @Description: TODO* @author Liu* @date 2017年12月17日 上午11:40:05 *  */interface TestInter {	static void test1(){		System.out.println("TestInter里面的静态方法");	}		default void test2(){		System.out.println("TestInter里面的默认方法");	}		default void test3(){		System.out.println("TestInter里面的test3方法");	}}//静态方法不会被继承interface TestInter2 //extends TestInter{	static void test1(){		System.out.println("TestInter2里面的静态方法");	}		default void test2(){		System.out.println("TestInter2里面的默认方法");	}	}interface TestInter3 extends TestInter,TestInter2{	/* (非 Javadoc) 	* 

Title: test2

*

Description:

* @see com.lty.java8.TestInter2#test2() */ //子接口可以重写父接口的默认方法 @Override default void test2() { TestInter2.super.test2(); } }//实现了两个接口,但是静态方法不会被继承class TestInterface implements TestInter,TestInter2{ /* (非 Javadoc) *

Title: test2

*

Description:

* @see com.lty.java8.TestInter2#test2() */ //实现类可以重写父接口的默认方法 @Override public void test2() { // TODO Auto-generated method stub TestInter2.super.test2(); } }public class TestInterfaceMain{ public static void main(String[] args) { TestInter.test1(); TestInter2.test1(); TestInterface ti = new TestInterface(); ti.test2(); }}

    2、TestFunctionalInterface.java

/** * @Title: TestFunctionalInterface.java * @Package com.lty.java8 * @Description: TODO* @author Liu * @date 2017年12月17日 下午5:14:06 * @version V1.0 */package com.lty.java8;interface TestFunctionalInterface1{	void test();}//没有抽象方法的接口是普通接口,这种接口通常用于标记使用,例如java的序列化interface TestFunctionalInterface2{}//使用@FunctionalInterface的接口,有且仅有一个抽象方法(static方法和default方法无限制)@FunctionalInterfaceinterface TestFunctionalInterface3{	void test();	static void test2(){		System.out.println("test2");	}}//找到多个抽象方法,不是函数式接口,不能使用@FunctionalInterface注解//@FunctionalInterfaceinterface TestFunctionalInterface4{	void test();	void test2();}/** * @ClassName: TestFunctionalInterface * @Description: TODO* @author Liu* @date 2017年12月17日 下午5:14:06 *  */public class TestFunctionalInterface {}

二、java8接口的变化总结

    1、静态方法和默认方法,方法前面使用static或者default进行修饰,这种方法必须有方法体;

    2、如果一个接口只有一个抽象方法,默认自动变为函数式接口;

    3、如果使用了FunctionalInterface对接口进行注解 ,该接口只能有 一个抽象方法。

    

转载于:https://my.oschina.net/Howard2016/blog/1591057

你可能感兴趣的文章
LINUX常用命令
查看>>
百度云盘demo
查看>>
概率论与数理统计习题
查看>>
初学structs2,简单配置
查看>>
Laravel5.0学习--01 入门
查看>>
时间戳解读
查看>>
sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hxsyl-journalnode.pid: Permission denied
查看>>
@RequestMapping 用法详解之地址映射
查看>>
254页PPT!这是一份写给NLP研究者的编程指南
查看>>
《Data Warehouse in Action》
查看>>
String 源码浅析(一)
查看>>
Spring Boot 最佳实践(三)模板引擎FreeMarker集成
查看>>
Fescar 发布 0.2.3 版本,支持 Redis 和 Apollo
查看>>
Google MapReduce到底解决什么问题?
查看>>
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>