在 java 8 之前,接口与其实现类之间的 耦合度 太高了(tightly coupled),当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法解决了这个问题,它可以为接口添加新的方法,而不会破坏已有的接口的实现。接口默认方法有两种:

1. 非静态默认方法

定义

package com.test

public interface DefaultTest {

default void print() {

System.out.println("我是非静态方法!");

}

}

使用

package com.test

public class DefaultTestImpl implements DefaultTest {

@Override

public void print() {

DefaultTest.super.print(); // 继承父亲的内容

System.out.println("我是非静态方法儿子!");

}

public static void main(String[] args) {

new DefaultTestImpl().print();

}

}

2. 静态默认方法

定义

package com.test

public interface StaticTest {

static void print() {

System.out.println("我是静态方法!");

}

}

使用1

静态方法不能重写,只能使用。

package com.test

public class StaticTestImpl implements StaticTest {

public static void main(String[] args) {

StaticTest.print();

}

}

使用2

不在同一包下。

package com.another

import com.test.StaticTest;

public class StaticTestUser{

public static void main(String[] args) {

StaticTest.print();

}

}

参考文献

java interface 默认_Java8 接口interface默认方法相关推荐

  1. java程序设计_Java程序设计--接口interface(笔记)

    有时必须从几个类中派生出一个子类,继承它们所有的属性和方法.但是,Java不支持多重继承.有了接口,就可以得到多重继承的效果. 有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有继承关系,仅 ...

  2. java interface_Java中的接口(interface)

    Java中提倡面向接口编程,而不是面向类编程,个人理解就是将做什么和怎么做分开,以实现松耦合的目的. 基本数据类型分四类八种 : 整型.浮点型.字符型.布尔型: 引用数据类型分三种 : 类 . 接口 ...

  3. 晋南讲堂之Java抽象类(abstract)与接口(interface)区分

    抽象类(abstract)和接口(interface)的对比 1. 抽象类(abstract)   我们一般声明一个抽象类按照如下形式: abstract class ClassName{//成员变量 ...

  4. Java多线程-实现Callable接口的call()方法,示例

    创建步骤,首先实现Callable接口的call()方法并指定返回值:然后创建实现类实例:FutureTask类使用Callable实现类的实例通过FutureTask的单参数构造器创建FutureT ...

  5. Java中抽象类和接口的使用方法及区别

    1.抽象类和接口 抽象类和接口为我们提供了实现类的公共行为规范,在继承它们时对里面的抽象方法进行重写就可以了. 抽象类:包含抽象方法和普通方法,抽象方法只需要声明就可以了,不需要写出方法体,此外,抽象 ...

  6. java duration 时间差_java8 计算时间差的方法示例

    java8 计算时间差的方法示例 发布于 2020-4-3| 复制链接 摘记: 一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.Chron ...

  7. java cloneable_java开发——Cloneable接口、clone()方法和深浅拷贝

    1.实现Cloneable接口表明该类的对象是允许克隆的. 2.允许克隆的意思是:可以调用clone()方法. 3.深拷贝还是浅拷贝,取决于如何重写Object的clone()方法. 4.原对象和克隆 ...

  8. java uniqueresult_Hibernate之Query接口的uniqueResult()方法详解

    如果查询返回多个值用list()方法 public void testQuery(){ Configuration config = new Configuration().configure(); ...

  9. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

最新文章

  1. CMake命令之function
  2. 检查字符串是否包含数字
  3. eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理
  4. ui设计师就业前景怎么样?
  5. python 获取二维数组所有元素
  6. 序号-element-序号根据页数和行数计算
  7. 《移动App测试实战》——1.4 本章小结
  8. android加不进去百度云,安装android-x86教程。(没法再贴吧发表,只有百度网盘在线阅读...
  9. 【Linux开发板学习教程】全免费超全面超详细
  10. 敏感词高效检测从浅到深
  11. 什么是鸭子类型(duck typing)
  12. 【gradle exclude冲突依赖】
  13. SpringBoot resultful风格返回格式
  14. Java基础学习过程
  15. 建立oracle数据库链接,Oracle数据库创建数据库连接(DBLink)详细讲解
  16. 二维离散动力学系统的混沌研究【基于matlab的动力学模型学习笔记_9】
  17. 一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井
  18. 规范化定义你了解吗?
  19. 什么?你还没女伴?教你如何借助Python俘获女孩子芳心
  20. canvas绘制折线路径动画

热门文章

  1. Linux负载均衡Linux Virtual Server (lvs) 内核自带的负载均衡器
  2. Linux虚拟文件系统VFS的相关数据结构和操作
  3. 【HTML+CSS网页设计与布局 从入门到精通】第12章-CSS
  4. python加法赋值运算符为_Python 运算符
  5. fiddler修改支付金额_支付漏洞总结
  6. FaceDetector(人脸识别)
  7. oracle big table1,关于Big_Table脚本的一些有关问题
  8. python字符串转浮点数_python – 无法将字符串列表转换为浮点数
  9. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型
  10. c语言学习-自定义并调用函数求三个数的最小公倍数