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();
}
@Override
public 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 方法的一般形式如下:
java8新特性(2)--接口的默认方法的更多相关文章
- 【Java8新特性】- 接口中默认方法修饰为普通方法
Java8新特性 - 接口中默认方法修饰为普通方法 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学 ...
- java8新特性:接口的默认方法与静态方法
接口中一共可以定义三种方法: 1.抽象方法,也就是需要实现者必须实现的方法,最常见的那种 2.默认方法,不需要实现者实现 3.静态方法,不需要实现者实现 默认方法: 允许在已有的接口中添加新方法,而同 ...
- JDK1.8新特性(一): 接口的默认方法default
前言 今天在学习mysql分区优化时,发现一个博客专家大神,对其发布的文章简单学习一下: 一:简介 我们通常所说的接口的作用是用于定义一套标准.约束.规范等,接口中的方法只声明方法的签名,不提供相应的 ...
- Java8新特性之接口defualt,static方法
简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继 ...
- 【Java8新特性】接口中的默认方法和静态方法,你都掌握了吗?
写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法 ...
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系 ...
- Java8新特性_接口中的默认方法
默认方法由来猜想 1. Collection接口.Collections公共类. 同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...
- Java8 新特性 函数式接口
什么是函数式接口 函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method).但是它还是一个接口,只是有些特殊罢了. 函数式接口的 ...
- java8新特性-函数式接口详细讲解及案例
一.函数式接口 1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口.函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适 ...
- java8-新特性--(接口的默认方法与静态方法)
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明. public interface Inte{ void method(); default void defaultMethod(){ ...
随机推荐
- django-用户中心订单页面
提交订单页面place_order.html,创建订单成功后跳转到用户订单页面 {% block bottomfiles %} <script type="text/javascrip ...
- 【学习笔记】Kruskal 重构树
1. 例题引入:BZOJ3551 用一道例题引入:BZOJ3551 题目大意:有 \(N\) 座山峰,每座山峰有他的高度 \(h_i\).有些山峰之间有双向道路相连,共 \(M\) 条路径,每条路径有 ...
- (实例2) TFT2.0液晶屏幕测试 mega2560
关键修改 针对mega2560板子 #define TFT_RST A4 #define TFT_RS A3 #define TFT_CS A5 // SS #define TFT_SDI A2 // ...
- shell随机数比较
#!/bin/bash a=$(expr $RANDOM % ) #生成一到一百的随机数 echo $a #打印随机数 b= while true do let b++ echo "比较了第 ...
- .net解决大文件断点续传
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- centos gcc 新版本安装的一种方法
最近出来一个v 语言,打算试用下,但是需要编译,centos 7 gcc 版本太低,一种可选的解决方法 使用Software Collections Software Collections 安装方法 ...
- 【区间DP】加分二叉树
https://www.luogu.org/problemnew/show/P1040#sub 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为 ...
- 洛谷 P4071 [SDOI2016]排列计数 题解
P4071 [SDOI2016]排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳 ...
- vue-cli3整体迁移至服务端渲染nuxtjs
vue项目与nuxt.js实在有着太多的不同,例如项目结构变化很大,router.js没了,vuex store写法有变化,router钩子没了等等.老项目毕竟也有一些体量,这么折腾我可接受不了,不过 ...
- 洛谷P3534 [POI2012] STU
题目 二分好题 首先用二分找最小的绝对值差,对于每个a[i]都两个方向扫一遍,先都改成差满足的形式,然后再找a[k]等于0的情况,发现如果a[k]要变成0,则从他到左右两个方向上必会有两个连续的区间也 ...