关于javaSE8之后的默认方法的整理

2023-10-31

网络中的说法
关于java8接口中默认方法的使用
8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论:
1.当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。
2.当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法
3.当实现的多个接口中有相同签名的方法时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。

java核心技术的说法
接口中解决默认方法冲突
如果先在一个接口中将一个方法定义为默认方法,然后又在超类或者另一个接口中定义了同样的方法,那么同时实现这两个接口的类或者既继承了超类又实现了接口的类就会发生冲突。但Java提供相应的规则:

1.超类优先。如果超类提供一个具体方法,同名而且有相同参数类型的默认方法会被忽略。

2.接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型相同的方法,就必须解决冲突。
例子
1.假设Person是一个类(有getName方法),Named是一个接口
interface Named{
default String getName(){
return getClass().getName()
}
}
有一个类Student继承了Person和实现了Named接口:

class Student extends Person implements Named{…}

在这种情况下,只会考虑超类方法,接口的所有默认方法都会被忽略。接口可添加默认方法在Java SE 8中才有,使用“类优先”原则可以确保Java SE 7的兼容性,如果为一个接口添加默认方法,这对于有这个默认方法之前能正常工作的代码不会有任何影响。
2.假设Person是一个接口(默认实现了getName方法),Named依旧是一个接口,类Student实现了这两个接口:

class Student implements Person,Named{…}

类会继承Person和Named接口中提供的两个不一致的getName方法,并不是从中选择一个,这样Java编译器就会报告一个错误,我们需要解决这个二义性。只需要在Student类中提供一个getName方法,在这个方法中,可以选择两个冲突方法中的一个:
class Student implement Person,Named{
public String getName(){
return Person.super.getName();
}
}

现在假设Named接口没有为getName提供默认实现:

interface Named
{
String getName();
}

Students类会从Person接口继承默认方法吗?这好像挺有道理,不过,Java设计者更强调一致性。两个接口如何冲突并不重要。如果至少有一个接口提供了一个实现,编译器就会报告错误,而程序员就必须解决这个二义性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于javaSE8之后的默认方法的整理 的相关文章

  • 在HM和VTM上实现无损压缩

    1 HM 方法一 在命令行输入增加 TransquantBypassEnableFlag 1 CUTransquantBypassFlagForce 1 HM16 9中对应的命令行 方法二 直接在cfg里面修改 把TransquantByp
  • C代码创建多通道WAV音频文件

    C代码创建多通道WAV音频文件 算法调试经常需要在PC端进行仿真输出 涉及到多通道 或者每一级算法的输出对比 这时需要多通道的WAV文件生成 代码 这里给出的是默认16bit单点数据位长 可以自己修改下 改成自己想要的位长 file wav
  • Socket长连接与短连接

    长连接与短连接 所谓长连接 指在一个TCP连接上可以连续发送多个数据包 在TCP连接保持期间 如果没有数据包发送 需要双方发检测包以维持此连接 一般需要自己做在线维持 短连接是指通信双方有数据交互时 就建立一个TCP连接 数据发送完成后 则
  • MBA-day13 逻辑学 模态推理(可能与必然的推理)

    1 基本概念 模态判断 是反应事物的可能性或必然性的判断 根据判断所反应的事物的可能性还是必然性 可以把模态判断分为可能判断与必然判断 模态命题 可能命题 必然命题 可能肯定命题 可能否定命题 必然肯定命题 必然否定命题 2 模态判断的负判
  • 第63讲:Python编程案例之猴子吃桃

    文章目录 1 需求描述以及分析 2 递推方式实该该程序 3 递归方式实现该程序 1 需求描述以及分析 需求描述 猴子第一天摘了若干个桃子 第一天吃了若干个桃子中的一半 觉得不过瘾 又多吃了一个 第二天早上又将第一天剩下的桃子吃了一半 并且也
  • IDEA中修改workspace.xml内容,保存后自动被删除

    最近在做一个SpringBoot的分布式项目 由于项目里面有多个启动器 每次查找启动类文件来启动服务效率就很低 于是想到用Run Dashboard来管理启动类 由于是新的电脑装的IDEA没有自动开启这个工具 因此需要手动开启一下 开启方式
  • 【Docker】安装Presto连接Hive、mysql、oracle、postgresql、SQL server等7种类型数据库

    目录 1 简介 2 下载安装 1 下载镜像 2 下载presto客户端jar文件 3 将hadoop配置拷贝到容器 4 新增hive properties配置文件 5 重启容器 在linux命令行下 3 测试连接 4 其他类型数据库配置连接
  • Java 两点经纬度计算距离和角度

    角度 计算两点对于正北方向的朝向角度 0 360 param start format latitude 30 longitude 120 param end private static double bearing List
  • UEFI入门必读的12本书

    作者简介 罗冰 系统安全 特别是物理隔离领域 专家 主导开发网络隔离卡 双网隔离机 国产隔离系统 单向光传输等各类安全产品 拥有十几项发明和实用新型专利 致力于UEFI技术的研究 实践和推广 在CSDN和知乎上设有 UEFI开发探索 专栏
  • UE4(unreal engine4)蒙太奇动画删除不想要的帧数

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 问题原因 二 具体操作步骤 前言 UE4 unreal engine4 蒙太奇动画删除不想要的帧数 当我们在UE4中导入一个fbx骨骼动画 当我们想要截取动画中某些不想用的帧时 点
  • 软件版本号命名规范_产品版本命名的规范与规则

    上一篇文章我们对产品的版本迭代的方法进行了一些总结 本篇文章我会针对产品的版本命名 验收 发布这三个层面 来总结一下我自己的想法 希望能对大家有所帮助 01 产品版本命名的规范与规则 1 1 版本命名规范 软件版本号由主版本号 次版本号 修
  • springboot后台获取不到前台Vue日期问题解决

    一 实体类字段写法如下 JsonFormat pattern yyyy MM dd timezone GMT 8 private Date sendTime Vue使用element ui写法
  • 4.2、Flink任务怎样读取文件中的数据

    目录 1 前言 2 readTextFile 已过时 不推荐使用 3 readFile 已过时 不推荐使用 4 fromSource FileSource 推荐使用 1 前言 思考 读取文件时可以设置哪些规则呢 1 文件的格式 txt cs
  • (二)程序语言设计基础

    目录 1 程序设计语言概述 1 1 基本概念 1 1 1 低级语言和高级语言 1 1 2 编译程序和解释程序 1 1 3 程序设计语言的定义 1 1 4 程序设计语言的分类 1 2 程序设计语言的基本成分 1 2 1 数据成分 1 2 2
  • 2022最新android设备uuid、udid使用教程​

    前言 udid UDID是Unique Device Identifier的缩写 中文意思是设备唯一标识 uuid UUID是Universally Unique Identifier的缩写 中文意思是通用唯一识别码 简言之 udid对应某
  • elasticsearch 中text与keyword的区别

    创建索引 PUT ellis mappings properties name type text fields keyword type keyword ignore above 256 age type long 我们可以看到name类
  • VBA常用语法

    最近接触了一下VBA编程 才知道Excel还能编程 而且还如此强大 真的是惊呆了 话不多说 先了解一下VBA常用的语法吧 1 基础语法 高级for循环 Function deleteArrayByIndex list As String D
  • oracle获取随机记录

    oracle获取随机记录 select from select from ford car order by dbms random value where rownum lt 1001

随机推荐

  • 【vision transformer】DETR原理及代码详解(三)

    transformer 端到端目标检测DETR项目实践及代码详解 Paddle Detr git PaddleViT object detection DETR at develop BR IDL PaddleViT GitHub 数据集及
  • Redis SDS简单动态字符串

    结构体定义 本质上说就是用C语言来实现基本的面向对象 来对底层的字符串进行表示 方便上层使用 为调用者减少负担 typedef char sds struct sdshdr int len int free char buf 举例常用操作
  • 搭建JMeter分布式测试环境

    分布式测试概述 现在我们来了解如何使用多台机器来执行压力测试 也就是所谓的分布式测试 当我们模拟大量的并发虚拟用户时 比如我们要起10万 100万甚至更多的并发用户时 一台负载机器可能就满足不了我们需要的用户量 此时 就需要使用多台主机搭建
  • Git入门--自定义标签

    忽略特殊文件 忽略某些文件时 需要编写 gitignore gitignore文件本身要放到版本库里 并且可以对 gitignore做版本管理 配置别名 git config global alias co checkout 用co来代替c
  • FFmpeg源码分析:av_register_all()注册封装器与解封装器

    FFmpeg中av register all 函数用于注册所有muxers demuxers与protocols FFmpeg4 0以前是用链表存储muxer demuxer FFmpeg4 0以后改为数组存储 并且av register
  • SPP原理和代码

    空间金字塔池化 Spatial Pyramid Pooling SPP 原理和代码实现 Pytorch 一 为什么需要SPP 首先需要知道为什么需要SPP 我们都知道卷积神经网络 CNN 由卷积层和全连接层组成 其中卷积层对于输入数据的大小
  • 众享比特董事长严挺:数字藏品在国内有三大发展趋势

    2022年11月2日 巴比特主办的温州元宇宙月系列活动之 数字藏品 虚拟人 元宇宙营销新策略 论坛在温州召开 众享比特董事长严挺 众享链网发起人严挺出席论坛并进行主题为 元宇宙在国内落地的一些实践分享 的演讲 温州元宇宙主题月秉承 拥抱数字
  • Hyperledger fabric2.4 搭建自己的网络

    1 使用cryptogen工具生成证书 1 1 将fabric samples bin目录下的二进制文件复制到 usr local bin目录 以便全局使用这些命令 cd fabric samples bin cp usr local bi
  • 那些你可能遇到的 Linux 命令?什么,你还不知道?赶紧收藏?完善中!

    文章目录 一 Linux 进程 1 通过进程名查找进程号 1 1 ps aux ps ef diff 1 2 ps aux ps aux 什么 它们不一样 1 3 grep awk 取出进程号 取出进程号并 Kill 2 通过进程号查看进程
  • LINUX应用和驱动交互的四种方式

    Linux开发中 应用读取数据时往往会遇到驱动尚未获得有效数据的情况 所以需要采用适合的同步方式 1 非阻塞方式 非阻塞方式 顾名思义就是不管数据是否准备好 驱动都会返回结果 采用这种方式就需要应用不停地重复查询 查询硬件的线程就会一直都占
  • Centos7 升级openssl-1.1.1s及openssh-9.1p1(附脚本)

    主要是上个月openssl出现了漏洞 因此要对服务器的进行升级 建议如果没问题还是尽量别升级 主要步骤是2 脚本内容也只包含升级 1和3是开启和关闭telnet 不建议使用telnet 1 安装和启动telnet 实际中我没使用telnet
  • 数据结构前言

    一 什么是数据结构 数据结构是计算机存储 组织数据的方式 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合 上面是百度百科的定义 通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式 举个简单明了的
  • Web Worker 用法

    一 概述 JavaScript 语言采用的是单线程模型 也就是说 所有任务只能在一个线程上完成 一次只能做一件事 前面的任务没做完 后面的任务只能等着 随着电脑计算能力的增强 尤其是多核 CPU 的出现 单线程带来很大的不便 无法充分发挥计
  • DBaaS体系及特性

    用户对云计算的交付能力已经不再满足于单纯的基础设施 IaaS 交付 他们希望数据中心中的更多传统IT 服务能以云服务模式进行交付 其中最为迫切的就是数据库 将数据库以云服务模式交付给用户 就是数据库即服务 DBaaS 也称云数据库 传统数据
  • VirusTotal——您身边的企业安全专家

    本文由 Cloud Ace 整理发布 Cloud Ace 是谷歌云全球战略合作伙伴 拥有 300 多名工程师 也是谷歌最高级别合作伙伴 多次获得 Google Cloud 合作伙伴奖 作为谷歌托管服务商 我们提供谷歌云 谷歌地图 谷歌办公套
  • 基于linux环境下安装jre + eclipse cdt

    博客的排版真的好糟糕 请看点击打开链接 一 下载所用到的软件安装包 1 java运行环境 jre 8u112 linux x64 tar gz 2 elipse cdt版本 eclipse cpp neon 2 linux gtk x86
  • pyahocorasick和pyltp包安装方法

    1 安装pyahocorasick 包 pip install pyahocorasick i Simple Index 这个需要VS环境 如果命令行安装提示没有VS环境可以进入 用VS命令行执行pip命令 即可安装成功 2 安装pyltp
  • Vue中el-dialog的用法

    写入HTML
  • 57 openEuler搭建Mariadb数据库服务器-管理数据库用户

    文章目录 57 openEuler搭建Mariadb数据库服务器 管理数据库用户 57 1 创建用户 57 2 查看用户 57 3 修改用户 57 3 1 修改用户名 57 3 2 修改用户示例 57 3 3 修改用户密码 57 3 4 修
  • 关于javaSE8之后的默认方法的整理

    网络中的说法 关于java8接口中默认方法的使用 8在接口中引入了默认方法 通过在方法前加上default关键字就可以在接口中写方法的默认实现 有点类似于C 中的多继承 但是当多个接口或父类中有相同签名的方法时 会引发一些问题 经过实验得出