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();}
} 

如果使用InterfaceA的默认方法,DefaultMethod只能重定义默认方法。
@Override
public void say(){InterfaceA.super.say();
}

3、在接口中使用静态方法

JDK 8还向接口添加了另一个新功能:定义一个或多个static方法的能力。与类中的static方法一样,接口定义的static方法可以由任何对象单独调用。因此,要调用static方法,接口的实现不是必需的,接口的实例也不是必需的。但对static方法的调用是通过指定接口名称,后跟一个句点和方法名称来实现的。调用static 方法的一般形式如下:

InterfaceName.staticMethodName
注意,这种调用方式与调用类中static 方法的方式类似。

转载于:https://www.cnblogs.com/luao/p/10847973.html

java8新特性(2)--接口的默认方法相关推荐

  1. Java8新特性:接口的默认方法与接口的静态方法

    https://www.cnblogs.com/yanhw/archive/2018/01/01/8169086.html https://blog.csdn.net/kimylrong/articl ...

  2. java 接口的静态方法_Java8新特性:接口的默认方法与接口的静态方法

    默认方法允许接口方法定义默认实现,子类方法不必须实现此方法而就可以拥有该方法及实现.如下: public interface DefaultFuncInter { int getInt(); defa ...

  3. Java8 新特性:Lambda 表达式、方法和构造器引用、Stream API、新时间与日期API、注解

    Java8新特性:Lambda 表达式.方法和构造器引用.Stream API.新时间与日期API.注解 1.Java8新特性 1.1.主要的新特性: 1.2.编程风格 2.Lambda 表达式 2. ...

  4. java8新特性_乐字节-Java8新特性-函数式接口

    上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...

  5. Java8新特性_接口中的默认方法

    默认方法由来猜想 1. Collection接口.Collections公共类.  同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...

  6. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  7. java:java8新特性(Lambda 表达式、方法引用、构造器引用、数组引用、Stream API)

    速度更快 对 HashMap .ConcurrentHashMap低层的数据结构(数组+链表+二叉树) 低层的内存结构(将永久区更新为元空间,元空间使用的是物理内存) 代码更少(增加了新的语法 Lam ...

  8. Jdk1.8新特性(一) 接口的default方法

    Jdk1.8之前的接口中通常只声明方法的签名,方法的具体实现在子类中进行.Jdk1.8打破了这样的用法:接口中可以实现具体的方法体,只需要加上关键字static或者default修饰即可. 1)使用s ...

  9. java8新特性之lambda表达式(及方法引用与构造器引用)

    Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中).使用 Lambda 表达式可以使代码变的更加简洁紧凑. 一.语法 lambda 表达式的语法格式如下: (parameters) ...

  10. Java8新特性之构造器引用、方法引用

    构造器引用.方法引用 package com.stevenyin.methodref;import org.junit.Test;import java.io.PrintStream; import ...

最新文章

  1. 185页深度报告 扒一扒AI金融的老底【附下载】
  2. 关于移动端meta设置(未完待续)
  3. 计算php代码执行时间长短的类(精确到毫秒)
  4. WeChat微信支付类型与支付授权目录配置与回调地址设置
  5. Index of school
  6. 关于MySqlConnection的一个特殊异常
  7. eclipse远程调试liunx下的tomcat
  8. 横向时间轴(进度条)
  9. k8s拉取harbor镜像_Kubernetes-连接Harbor仓库拉取镜像
  10. Oracle数据库基本知识
  11. 毕设-基于Qt的餐饮ERP管理系统
  12. [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(2)
  13. git push failed to push some refs to xxxx 失败与解决方法
  14. 联想 linux u盘启动不了,联想u盘启动黑屏,开机按ESC无法进入U盘启动界面怎么办?...
  15. 键指如飞--Mac电脑快捷键学习
  16. 计算机社团评优申报资料,优秀学生社团申报表 优秀社团申报材料
  17. 项目工作任务 excel_在Excel中跟踪项目任务
  18. 概率论—贝叶斯定理 解析
  19. 飞翔的小鸟 c++ 2.0版
  20. 武汉工程大学致各位家长及同学们的一封公开信

热门文章

  1. 一个小白的转行Python的经历!
  2. 浙江大学最美学习笔记赏析!我太吃惊了
  3. 数据结构期末复习之B树、B+树
  4. 透析 | 卷积神经网络CNN究竟是怎样一步一步工作的?
  5. python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)
  6. java 内存分析 ibm_IBM内存检测工具(IBM Thread and Monitor Dump Analyzer for Java)
  7. java中的链接之其他窗体_两个窗体之间的链接
  8. ufvm可以读哪些网格_墙面开裂原因有哪些?钢筋网和网格布怎么用?
  9. 渗透测试入门26之给你一个网站你是如何来渗透测试的?
  10. pandas将字符串转换成时间_pandas入门: 时间字符串转换为年月日