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()** ...
随机推荐
- python logging bydate
#!/usr/bin/env python #_*_coding:utf-8_*_ # vim : set expandtab ts=4 sw=4 sts=4 tw=100 : import logg ...
- 【转】GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
在不少人的心目中,显卡最大的用途可能就只有两点--玩游戏.看电影,除此之外,GPU并没有其他的作用了.但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不少人 ...
- 获取与Url链接相关的信息
以下结果的值以此示例为基础:http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere j ...
- GDI+ 操作TIFF ccitt t.6 压缩
Bitmap Bi=new Bitmap("C:\img.tif"); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Fil ...
- 营业额统计(SBT)
营业额统计(SBT) #include<cstdio> #include<cstring> #include<string> #include<cstdlib ...
- 【MySQL】排序原理与案例分析
前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐 ...
- git push error: A Contributor Agreement must be completed before uploading
因为是从官方版本库做的镜像,所以有些权限直接从官方同步到了本地. 今天,有同事执行git push操作,报错: 根据网上搜索的内容,在gerrit.config中[auth]中添加如下内容: [aut ...
- Flask 的 Context 机制
转自https://blog.tonyseek.com/post/the-context-mechanism-of-flask/ Flask 的 Context 机制 2014 年 07 月 21 日 ...
- Codeforces 732F [边双联通分量][tarjan]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个无向图.现在要求给这个无向图的边加上方向. 定义f(x)为从x点出发能够到达的点的数目. 使得MIN(f(x))最大. 思路: 先tarja ...
- Django 静态文件配置(static files)
Django version: 1.9 Python versrion: 3.5.2 这几天Django配置静态文件(本例是要加载index.css), 总是不对,最后终于试对了,这里记录下,方便以后 ...