JDK1.8接口的默认实现

2023-11-02

很多时候,别人问我接口和类的区别的时候,我都会回答接口里面只能有抽象方法,而不能够有具体方法,但是今天看Mybatis源码的时候,发现了有一段代码是判断接口里面的默认方法的,于是我发现原来对接口的认识太过于肤浅了。

JDK1.8之后,在接口里面可以定义default方法,default方法里面是可以具备方法体的,当子类实现该接口之后,不需要重写该方法即可以调用该方法。

ok,看看代码

//定义一个接口 里面有一个默认方法
public interface Face {
    default String get(){
        return "123";
    }
}

//定义一个实现类,空类
public class FaceImp implements Face {
}

//写一个测试类
public class Main {
    public static void main(String[] args) {
        Face face=new FaceImp();
        System.out.println(face.get());
    }
}

测试结果:
123

我们可以看到,实现类可以直接继承父接口的默认方法,这个默认实现子类也是可以重写的。

现在抽象类和接口就更像了,那么我们来看看现在接口和抽象类的区别:

  1. 抽象类只能单继承,接口可以多现实
  2. 抽象类中可以用private、protected方法,接口不可以用

那么在接口中加入default方法有什么好处呢?

  1. 对于一些公有的方法,直接使用默认的方法,就不用在实现类中写重复代码了。
  2. 可以对代码零入侵的加入一些新的方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK1.8接口的默认实现 的相关文章

随机推荐

  • DINO 论文笔记

    DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection DINO通过使用对比方法 混合查询选择方法的anchor初始化的和盒子预测的loo
  • 【看后必会】一步步教你用React写一个markdown实时编辑器!

    1 实现效果 最近在用React写一个博客管理系统 有一个功能是添加新文章 在新建文章的页面 我希望做到像CSDN这样 左边是编辑区 markdown格式 右边是预览区 实时更新 编辑文本的同时 在预览区就能看到效果 就自己动手实现了一个这
  • 华为OD 机试3题(通过率60%,80%,75%)

    import java util List import java util Scanner import java util class Points int x int y public Points int x int y this
  • uni-app:刷新当前页面

    var pages getCurrentPages 获取所有页面的数组对象 var currPage pages pages length 1 当前页面 uni redirectTo url currPage page fullPath 执
  • [javascript] 深入理解js闭包

    闭包 closure 是Javascript语言的一个难点 也是它的特色 很多高级应用都要依靠闭包实现 一 变量的作用域 要理解闭包 首先必须理解Javascript特殊的变量作用域 变量的作用域无非就是两种 全局变量和局部变量 Javas
  • MULTI-CHANNEL SPEECH ENHANCEMENT USING GRAPH NEURAL NETWORKS 文献翻译

    MULTI CHANNEL SPEECH ENHANCEMENT USING GRAPH NEURAL NETWORKS 文献翻译 来自于脸书实验室的一篇文章 将图神经网络用在了多通道语音增强上面 思路比较新奇 下面可以通篇看一下翻译的中文
  • [整理]Linux配置开启SSH服务

    查看SSH是否已经安装 系统一般自带 rpm qa grep ssh 安装SSH yum install ssh 启动SSH service sshd start 停止SSH service sshd stop 重启SSH service
  • Windows下cmd命令,进入指定目录,创建查看目录

    Windows的cmd如何进入指定目录 1 进入指定盘 盘符 不区分大小写 只有盘符不区分 其下的一级到多级目录需要区分大小写 gt c gt d 2 进入D盘下的文件夹中 D盘下的一级目录可以使用下面三种进入 必须是在D gt 下键入 二
  • MFC下ADO连接MYSQL数据库

    一 ADO简介 MFC下最常见的两种连接数据库的方式就ODBC和ADO 而ADO是在OLEDB之上的高层数据库访问技术 其最大的优势就进行了封装 这样可以使我们在程序中控制对数据库的操作更加方便 而且当单独封装成类后 符合模块化的思想 二
  • 云服务器机型系统选择,云服务器机型选择操作系统

    云服务器机型选择操作系统 内容精选 换一换 按需购买的两台同类型弹性云服务器 操作系统类型相同 如Windows和Windows Linux和Linux 关机卸载系统盘后 重新挂载至对方弹性云服务器 实现系统盘互换 互换成功后 弹性云服务器
  • JVM的CMS(concurrent mark sweep)四个阶段详细介绍

    1 initial mark 初始标记 通过GC roots找到根对象 这个过程会STW stop the world 由于根对象并不多 所以STW的时间不会长 2 concurrent mark 并发标记 这个过程其他工作线程也在改变引用
  • Windows下Jenkins的详细安装及使用

    1 Ubuntu下Jenkins具体安装与构建部署使用教程 Jenkins是一个开源软件项目 旨在提供一个开放易用的软件平台 使软件的持续集成变成可能 Jenkins是基于Java开发的一种持续集成工具 用于监控持续反复的工作 功能包含 1
  • Resful API是什么

    文章目录 摘要 1 RESTful API是什么 2 RESTful是什么 参考资料 摘要 RESTful是整个网络应用程序设计风格和开发方式 而RESTful API是其中API的设计风格 1 RESTful API是什么 API接口在设
  • idea调试debug(HashMap,ArrayList等)开启/关闭集合类视图

    idea对集合类调试的时候自己做了视图 忽略掉了集合的内部结构 在下面的位置关闭就可以看到原有的集合视图 debug下对比 ArrayList debug下对比 HashMap
  • Java并发编程实战

    文章目录 Java并发编程实战 并发简史 计算机 进程和线程 什么是线程安全类 它的定义是什么 原子性与复合操作 内置锁 锁的重入 用锁来保护状态 活跃性与性能 对象的共享 可见性 使用volatile可以保证可见性 任务执行 在一个线程中
  • Deep learning:三十五(用NN实现数据降维练习)

    前言 本文是针对上篇博文Deep learning 三十四 用NN实现数据的降维 的练习部分 也就是Hition大牛science文章reducing the dimensionality of data with neural netwo
  • 证书报错NET::ERR_CERT_AUTHORITY_INVALID

    因为百度的证书安装路径出错 导致每次打开百度都会报错 NET ERR CERT AUTHORITY INVALID 错误的证书认证 无效证书 报这个错误无非两种情况 证书安装错误 证书过期或有问题 1 证书过期 通过certmgr msc
  • WEB 前端面试题 (实战)(大全)

    文章目录 原生JS 1 什么是 JavaScript 2 简单介绍一下 JS 基本类型 3 字符串如何转换成布尔类型 4 数值类型是如何转换布尔类型 5 字符串是如何转换成数值的 6 都了解过哪些运算符 7 和 运算符区别是什么 8 给变量
  • FTP网盘小demo

    服务端 include
  • JDK1.8接口的默认实现

    很多时候 别人问我接口和类的区别的时候 我都会回答接口里面只能有抽象方法 而不能够有具体方法 但是今天看Mybatis源码的时候 发现了有一段代码是判断接口里面的默认方法的 于是我发现原来对接口的认识太过于肤浅了 JDK1 8之后 在接口里