java8之接口增强
Java8是由oracle公司于2014年3月正式发布,它是继java5 以来最重要的发布版本。Java8包含了很多新的特性,可以简化开发,提升代码的可读性。
Java8的一些重要新特性包括:
l 接口增强
l 方法引用
l Lambda表达式
l Stream
其中还有一些其他的特性,比如注解的更新,以及一些新的API等。以上四个特性在java8的开发中会比较常用。因为接口增强特性比较独立,而其他三个特性或多或少都有关联关系。这里先记录下接口增强特性的学习笔记。
1.什么是接口增强?
在java8以前的版本中,定义一个接口时,所有的方法必须是抽象方法,不能有具体实现,这是java语法规定的。但是在java8中定义一个接口时,在满足特定的前提下,可以有方法的具体实现。这样一个接口中可以有属性,可以有抽象方法,也可以有具体的方法,这跟java8以前的接口比,明显接口的功能变得强大了。
2.接口中如何定义具体的方法实现?
首先,接口中定义具体的方法实现是有限制的,它不能像我们在一个普通类那样随便定义方法实现,它只能定义default和static类型的方法。示例代码如下:
interface MyInterface {
public void print();
// default 和 static 方法的出现为了解决实现该接口的子类代码重复的问题
default void defaultMethod() {
System.out.println("default method invoked! ");
}
default int add(int a, int b){
return a + b;
}
static void staticMethod() {
System.out.println("static method invoked! ");
}
static int multiply(int a, int b){
return a * b;
}
//...
}
除了关键字修饰,其他跟普通的方法定义并没有什么不同。
3.如何调用
1)default方法调用
定义一个类实现该接口,new该类的实例,调用即可。
2)static方法调用
类名.方法名() 调用,这跟以前的静态方法调用方式一样。
示例代码如下:
public class InterfaceTest {
public static void main(String[] args) {
MyInterface msg = new InterfaceImpl();
msg.print();
msg.defaultMethod(); //调用default方法
MyInterface.staticMethod(); //调用static方法
}
}
interface MyInterface {
public void print();
// default 和 static 方法的出现为了解决实现该接口的子类代码重复的问题
default void defaultMethod() {
System.out.println("default method invoked! ");
}
default int add(int a, int b){
return a + b;
}
static void staticMethod() {
System.out.println("static method invoked! ");
}
static int multiply(int a, int b){
return a * b;
}
//...
}
4. 应用场景
想象这样一中情况,当多个类实现一个接口的某个方法时,方法的具体实现代码相同,这样就会造成代码重复问题。接口增强就相当于把公共的代码抽离出来,放入接口定义中,这样实现类对于该方法就不用重新定义,直接调用即可,这很好的解决了实现该接口的子类代码重复的问题。
java8之接口增强的更多相关文章
- Java8 函数式接口-Functional Interface
目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...
- Java8函数接口实现回调及Groovy闭包的代码示例
本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场景: 主体流程是不变的,变的只是其中要调用的具体方法. 其特征是: Begi ...
- java8 函数式接口——Function/Predict/Supplier/Consumer
Function 我们知道Java8的最大特性就是函数式接口.所有标注了@FunctionalInterface注解的接口都是函数式接口,具体来说,所有标注了该注解的接口都将能用在lambda表达式上 ...
- java8中接口default、static新特性,与抽象类区别
之前Java接口中的方法默认都是public abstract,成员变量默认都是public static final,偶然发现接口中可以有default类型的方法,才知道java8中接口可以有自己的 ...
- java代码之美(14)---Java8 函数式接口
Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加 ...
- java代码(14) --Java8函数式接口
Java8函数式接口 之前有关JDK8的Lambda表达式 Java代码(1)--Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加简洁 一.概 ...
- Java8学习笔记(四)--接口增强
增强点 静态方法 public interface InterfacePlus { void run(); static Date createDate(){ return new Date(); } ...
- java8的接口新特性(可以有方法体的接口)(转)
以前Java的接口中定义的方法不可以有方法体,这样试用起来,有时候听不方便的,当有多个类实现了想同的接口,接口中某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码(或者说co ...
- JAVA8函数式接口
java8 中内置的四大核心函数接口** Consumer<T> :消费型接口* void accept(T t)* Supplier<T> :供给型接口* T get()** ...
随机推荐
- html/京东项目/京东网页高仿/js/jq/css/java web/
登录部分HTML+CSS: <!DOCTYPE html><html> <head> <meta charset="UTF-8& ...
- 阿里云 crp kelude远程部署tomcat8 重启tomcat脚本
部署包路径:/usr/local/tomcat/webapps 应用服务启动脚本路径:/usr/local/tomcat/bin/restart.sh 部署授权帐号:tomcat restart.sh ...
- spring mvc 4识别浏览器(移动端) spring-mobile-device
官方文档: http://projects.spring.io/spring-mobile/ 通过mvc.xml配置示例: http://blog.csdn.net/wuyt2008/article/ ...
- Head First设计模式之装饰者模式(Decorator Pattern)
前言: 本节将深度讨论继承滥用问题,将会学到使用对象组合的方式,在运行时装饰类,在不修改任何底层代码的情况下,给对象赋予新的职责. 1. 基本需求:咖啡连锁店业务扩张需要重新设计订单系统 背景: ...
- Javascript模式(第五章对象创建模式)------读书笔记
一 命名空间模式 1 命名空间模式的代码格式 var MYAPP={ name:"", version:"1.0", init:function(){ } }; ...
- Verilog HDL那些事_建模篇笔记(实验八:键盘解码)
1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...
- Entity Framework 连接低版本数据库
使用EF6连接SQL2012生成的Edmx,分页时生成的查询语句使用了SQL 2012引入的新特性 OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY,结果在生产环境使用的数 ...
- phpmyadmin的root密码忘记了怎么办?
管理mysql数据库的工具有网页版的phpmyadmin(开源),也有诸如客户端Navicat for MySQL(商业). 好多环境集成包,比如XAMPP.WampServer等集成了phpmyad ...
- dede 二次开发系统迁移到 IIS 时会出现的问题及解决方案
1.IIS 会默认站点所有文件只读,故一开始请打开目录权限,注意赋予权限对象是 webuser 或 IIS user; 若是集群的话,则目录共享给IIS对应的用户 2.后台不能登陆 查看数据库配置文 ...
- *按类的某一字段排序(Lv)
给定一个student类,类中有两个属性ID,Score.对一组student类对象排序,写出方法.