1. 简介

  默认方法就是接口可以有实现方法, 而且不需要实现类去实现其方法, 默认方法的实现只需要在方法名的前面加一个default关键字即可实现默认方法.

2. 默认方法语法

public interface Vehicle {default void print(){System.out.println("我是默认语法格式!");}
}

3. 为什么要有这个特性呢?

  之前版本的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8 之前的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。

4. 使用

  在使用默认方法的时候, 可能会出现以下几种情况,
  (1) 接口中有默认方法, 一个类如果实现了多个接口, 刚好实现的接口中有相同的默认方法, --多个相同的默认方法
  解决方法有两种: 一种是定义自己的默认方法, 覆盖重写接口中的相同的默认方法; 另一种就是使用super指定调用接口中的方法.
  (2) 静态默认方法, Java 8的另一个特性就是接口中可以声明并且可以提供实现的静态方法.

5. 测试

package com.defaultmethod;/*** 测试Java 8 新特性默认方法** @author C-jerry* @date 2020/5/25 20:04*/
//为了方便查看, 将接口是实现类写在一个Java文件中/*** Method1和Method2有着相同的默认方法sayOwn*  解决方案:*          1.使用super指定调用接口中的方法*          2.重写自己的默认方法,覆盖接口中相同的默认方法*/
interface Method1{default void sayOwn() {System.out.println("我是默认method1");}/*** 静态方法*/static void sqyOwn2(){System.out.println("用来测试接口中声明并实现静态方法");}
}
interface Method2{default void sayOwn() {System.out.println("我是默认method2");}
}/*** 实现了Method1和Method2* 测试用super指定默认方法和static方法*/
class Say1 implements Method1,Method2{public void sayOwn(){//指定调用Method1中的sayOwn()Method1.super.sayOwn();//测试静态方法Method1.sqyOwn2();}
}
/*** 覆盖接口中相同的方法* 注意: 类中default修饰重写的方法, 会编译报错-->类中default省略*     错误信息: 'sayOwn()' in 'com.defaultmethod.Say2' clashes with 'sayOwn()' in 'com.defaultmethod.Method1'; attempting to assign weaker access privileges ('package-private'); was 'public'*/
class Say2 implements Method1,Method2{//方法一
//    @Override
//    public void sayOwn() {//        System.out.println("定义自己的sayOwn方法,覆盖接口中的方法, 方法一");
//    }//方法二: 覆盖实现接口中的默认方法public void sayOwn(){System.out.println("定义自己的sayOwn方法,覆盖接口中的方法, 方法二");}
}/*** 测试接口实现两方法, 重写自己的默认方法*/
interface Method3 extends Method1, Method2 {default void sayOwn() {System.out.println("接口Method3继承Method1和Method2, 重写自己的默认方法");}
}class say3 implements Method3{}//测试类
public class TestDefaultMethod {public static void main(String[] args) {Method1 say1 = new Say1();say1.sayOwn();Method2 say2 = new Say2();say2.sayOwn();Method3 say3 = new say3();say3.sayOwn();/*结果:情况一我是默认method1用来测试接口中声明并实现静态方法定义自己的sayOwn方法,覆盖接口中的方法, 方法一接口Method3继承Method1和Method2, 重写自己的默认方法情况二我是默认method1用来测试接口中声明并实现静态方法定义自己的sayOwn方法,覆盖接口中的方法, 方法二接口Method3继承Method1和Method2, 重写自己的默认方法*/}}

Java 8 新特性之默认方法相关推荐

  1. 【java8新特性】——默认方法(五)

    一.简介 默认方法是指接口的默认方法,它是java8的新特性之一.顾名思义,默认方法就是接口提供一个默认实现,且不强制实现类去覆写的方法.默认方法用default关键字来修饰. 默认方法可以解决的痛点 ...

  2. java8新特性_乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

  3. Java 8新特性探究(二)深入解析默认方法

    转载自 Java 8新特性探究(二)深入解析默认方法 什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. ...

  4. 【Java 8 新特性】Java Comparator.reversed | 倒序排序 - 默认方法

    Java Comparator.reversed | 倒序排序 - 默认方法 在 Stream.sorted 中使用 在 List.sort 中使用 在 Collections.sort 中使用 参考 ...

  5. Java 8新特性——default方法(defender方法)介绍

    转载自 Java 8新特性--default方法(defender方法)介绍 我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码.接口中定义的方法必须在接口的非抽象子类中实现 ...

  6. 【Java 8 新特性】Java Stream 通过skip()方法跳过前N个子元素

    [Java 8 新特性]Java Stream 通过skip方法跳过前N个子元素 1.skip() 示例 2.skip() vs limit() 参考文献 本页将介绍 Stream.skip方法示例. ...

  7. Java 8 新特性:扩展注解(类型注解和重复注解)

    转载自  Java 8 新特性:扩展注解(类型注解和重复注解) (注:先回顾下JDK1.5版本出现的注解 ,然后再解释JDK 8的注解 更新内容.) 一.注解(JDK1.5) 1.注解(@): 注解就 ...

  8. Java 9 新特性概述

    转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...

  9. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

最新文章

  1. 静态方法static 的了解
  2. oracle数据库学习相关笔记-转换函数
  3. ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
  4. JavaScript计算汉明距离(HammingDistance)
  5. Linux共享库路径配置
  6. oracle method_opt,统计量收集Method_Opt参数使用(下)
  7. python 关于字节串和字符串
  8. mysql索引选择_MySQL 索引选择原则
  9. 学生渐进片add如何给_渐进片的那些事「5」——验配之前的问诊
  10. paip. lbmall V3.1.1 乐彼多用户商城系统的安全漏洞总结
  11. ms sqlserver对象、所属用户、所属架构、登陆用户、同义词
  12. QTableView自定义拖拽行
  13. Ruby编程语言面试题库和答案(语法、代码)
  14. 企业快车道上的3个信号灯
  15. scikit-learn 的设计
  16. 蚂蚁金服、滴滴们掀起A/H上市潮,它们能打破折溢价的烦恼吗?
  17. 目标检测-twostage
  18. 数据结构——图基本概念
  19. SeleniumLibrary4.5.0 关键字详解(十)
  20. 自定义UITableViewCell实现ibooks类似的图书列表形式

热门文章

  1. WebRTC入门与实战 --- WebRTC原理与架构
  2. Visual Studio Professional 2015简体中文版
  3. poj 4092:牛仔裤
  4. 一个空肥皂盒和电风扇的故事 zz
  5. 10国内著名的IT论坛
  6. VLC预览高分辨率视频导致视频花屏分析笔记
  7. LDA文档主题发现R
  8. HiveMq自动重连
  9. python实用批量处理图片小项目
  10. Scaleform Gfx的Demo