java8新特性(2)--接口的默认方法
1、默认方法的定义和作用
在Java8以前的版本中,由接口定义的方法是抽象的,不包括方法体。JDK8版本的发布改变了这一点,其中给接口添加了一个新的功能:默认方法。默认方法允许为接口方法定义默认实现。也就是说,通过使用默认方法,现在可以为接口方法提供方法体,使其不再是抽象方法。
interface InterfaceA {default void say() {System.out.println("InterfaceA");}
}
public class DefaultMethod implements InterfaceA{public static void main(String[] args) {new DefaultMethod().say();}
}
在不破坏现有代码的情况下,能够合理地增强接口的功能。
在无需类提供占位符实现的情况下,提供了一种可选的功能。
2、默认方法的多继承问题
第一种情况:InterfaceA和InterfaceB两个并行接口,DefaultMethod同时实现InterfaceA和InterfaceB接口,则DefaultMethod必须重定义默认方法才可以使用。
public interface InterfaceA {default void say() {System.out.println("InterfaceA");}
}public interface InterfaceB {default void say() {System.out.println("InterfaceB");}
}public class DefaultMethod implements InterfaceA, InterfaceB {public static void main(String[] args) {DefaultMethod dm = new DefaultMethod();dm.say();}@Overridepublic void say() {}
}
第二种情况:两个非并行接口,InterfaceB继承InterfaceA,则默认方法将会使用InterfaceB类的默认方法。
public interface InterfaceA {default void say() {System.out.println("InterfaceA");}
}public interface InterfaceB extends InterfaceA {default void say() {System.out.println("InterfaceB");}
}public class DefaultMethod implements InterfaceB {public static void main(String[] args) {DefaultMethod dm = new DefaultMethod();dm.say();}
}
@Override
public void say(){InterfaceA.super.say();
}
3、在接口中使用静态方法
JDK 8还向接口添加了另一个新功能:定义一个或多个static方法的能力。与类中的static方法一样,接口定义的static方法可以由任何对象单独调用。因此,要调用static方法,接口的实现不是必需的,接口的实例也不是必需的。但对static方法的调用是通过指定接口名称,后跟一个句点和方法名称来实现的。调用static 方法的一般形式如下:
转载于:https://www.cnblogs.com/luao/p/10847973.html
java8新特性(2)--接口的默认方法相关推荐
- Java8新特性:接口的默认方法与接口的静态方法
https://www.cnblogs.com/yanhw/archive/2018/01/01/8169086.html https://blog.csdn.net/kimylrong/articl ...
- java 接口的静态方法_Java8新特性:接口的默认方法与接口的静态方法
默认方法允许接口方法定义默认实现,子类方法不必须实现此方法而就可以拥有该方法及实现.如下: public interface DefaultFuncInter { int getInt(); defa ...
- Java8 新特性:Lambda 表达式、方法和构造器引用、Stream API、新时间与日期API、注解
Java8新特性:Lambda 表达式.方法和构造器引用.Stream API.新时间与日期API.注解 1.Java8新特性 1.1.主要的新特性: 1.2.编程风格 2.Lambda 表达式 2. ...
- java8新特性_乐字节-Java8新特性-函数式接口
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
- Java8新特性_接口中的默认方法
默认方法由来猜想 1. Collection接口.Collections公共类. 同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...
- 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类
1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...
- java:java8新特性(Lambda 表达式、方法引用、构造器引用、数组引用、Stream API)
速度更快 对 HashMap .ConcurrentHashMap低层的数据结构(数组+链表+二叉树) 低层的内存结构(将永久区更新为元空间,元空间使用的是物理内存) 代码更少(增加了新的语法 Lam ...
- Jdk1.8新特性(一) 接口的default方法
Jdk1.8之前的接口中通常只声明方法的签名,方法的具体实现在子类中进行.Jdk1.8打破了这样的用法:接口中可以实现具体的方法体,只需要加上关键字static或者default修饰即可. 1)使用s ...
- java8新特性之lambda表达式(及方法引用与构造器引用)
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中).使用 Lambda 表达式可以使代码变的更加简洁紧凑. 一.语法 lambda 表达式的语法格式如下: (parameters) ...
- Java8新特性之构造器引用、方法引用
构造器引用.方法引用 package com.stevenyin.methodref;import org.junit.Test;import java.io.PrintStream; import ...
最新文章
- 185页深度报告 扒一扒AI金融的老底【附下载】
- 关于移动端meta设置(未完待续)
- 计算php代码执行时间长短的类(精确到毫秒)
- WeChat微信支付类型与支付授权目录配置与回调地址设置
- Index of school
- 关于MySqlConnection的一个特殊异常
- eclipse远程调试liunx下的tomcat
- 横向时间轴(进度条)
- k8s拉取harbor镜像_Kubernetes-连接Harbor仓库拉取镜像
- Oracle数据库基本知识
- 毕设-基于Qt的餐饮ERP管理系统
- [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(2)
- git push failed to push some refs to xxxx 失败与解决方法
- 联想 linux u盘启动不了,联想u盘启动黑屏,开机按ESC无法进入U盘启动界面怎么办?...
- 键指如飞--Mac电脑快捷键学习
- 计算机社团评优申报资料,优秀学生社团申报表 优秀社团申报材料
- 项目工作任务 excel_在Excel中跟踪项目任务
- 概率论—贝叶斯定理 解析
- 飞翔的小鸟 c++ 2.0版
- 武汉工程大学致各位家长及同学们的一封公开信
热门文章
- 一个小白的转行Python的经历!
- 浙江大学最美学习笔记赏析!我太吃惊了
- 数据结构期末复习之B树、B+树
- 透析 | 卷积神经网络CNN究竟是怎样一步一步工作的?
- python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)
- java 内存分析 ibm_IBM内存检测工具(IBM Thread and Monitor Dump Analyzer for Java)
- java中的链接之其他窗体_两个窗体之间的链接
- ufvm可以读哪些网格_墙面开裂原因有哪些?钢筋网和网格布怎么用?
- 渗透测试入门26之给你一个网站你是如何来渗透测试的?
- pandas将字符串转换成时间_pandas入门: 时间字符串转换为年月日