Java中接口的多继承
Java中接口的多继承
我们知道Java的类只能继承一个类,但可以实现多个接口。但是你知道么?Java中的接口却可以继承多个接口。本文就来说一说Java中接口的多继承。
进入主题之前,先扩展一下。Java为什么只支持单继承呢?
我们不妨假设Java支持多继承,举个例子,在这里有个A类,我们又编写了两个类B类和C类,并且B类和C类分别继承了A类,并且对A类的同一个方法进行了覆盖。如果此时我们再次编写了一个D类,并且D类以多继承的方式同时集成了B类和C类,那么D类也会继承B类和C类从A类中重载的方法,如下图所示。那么问题来了,D类也开始犯迷糊了,我到底应该哪个继承哪个类中的方法呢,因为类是结构性的,这样就会造成结构上的混乱。这就是多继承的菱形继承问题。
同时我们知道C++是支持多继承的,因为它解决了这个问题(我对C++不太熟,查了下资料,好像是通过虚基类实现的吧)。但是Java本着简单的原则,舍弃了多继承。
好,进入正题。我们还是举个实例来演示一下接口的多继承。
燕子是鸟,鸟会飞,也会唱歌。我们来模仿一下:
一、会飞的接口
12345package multiex;public inte ...
漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?
周末在家休息,女朋友在刷朋友圈,突然她问我:
鸿蒙OS回顾
2019年8月9日华为开发者大会上,华为消费者业务CEO余承东正式宣布发布自有操作系统鸿蒙,内核为Linux内核、鸿蒙微内核和LiteOS。未来将摆脱Linux内核和LiteOS,只有鸿蒙微内核。
鸿蒙(英语:Harmony OS,开发代号Ark)是华为自2012年开发的一款可能兼容Android app的跨平台操作系统。
图:鸿蒙OS的四大技术特性
什么是跨平台
在以前,平台 ≈ 操作系统。所以,传统意义上的跨平台即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。
但是随着科技的发展,平台 ≈ 操作系统已经不成立了,就像华为推出的鸿蒙OS,他可以支持到多种多样的设备,如手机、手表、电脑、汽车、智能家居设备等
所以,今天我们谈的跨平台,指的是跨设备。即平台 ≈ 设备
所以,华为希望鸿蒙OS可以运行在各种各样的设备上,所以,鸿蒙OS必然需要具备跨平台的能力。
而且,鸿蒙想要做的不仅仅是操作系统可以跨平台,更重要的是要让用户和开 ...
玩转Obsidian-基础设置篇
玩转 Obsidian | 基础设置篇
闲者时间_王掌柜
2020年11月06日
Matrix 精选Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
Obsidian 是一款非常优秀的「现代化」笔记管理工具,因其快速的功能迭代和优秀社区活跃度,成为了近期较为热门的笔记软件之一。个人经过一段时间的使用和体验,认为 Obsidian 已经具备了成为「主力笔记管理软件」的能力,并陆续将自己的笔记迁移到 Obsidian 上进行管理。
Obsidian 和其他常见的「笔记软件」有什么不同,它具备哪些优势,以及想要用好 Obsidian 有哪些「方法论」,我在上一篇文章《玩转 Obsidian | 打造知识循环利器》中有过详细的阐述,感兴趣的同学可以先翻过去了解一下。
由于后续我打算持续更新「玩转 Obsidian」系列文章,所以迫切需要一篇「关于基础设置和使用介绍」的入门级介绍文章,于是有了本篇。
碍于篇幅,我不可能将所 ...
面试必问的`Redis`,你掌握多少?
概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。
1、Redis支持多种类型的数据结构1).string:最基本的数据类型,二进制安全的字符串,最大512M。2).list:按照添加顺序保持顺序的字符串列表。3).set:无序的字符串集合,不存在重复的元素。4).sorted set:已排序的字符串集合。5).hash:key-value对的一种集合。
具体操作,看这篇文章:[[基础] PHP操作Redis,多操作几次你就会了](http://mp.weixin.qq.com/s?__biz=MzIxMDA0OTcxNA==&mid=2654262356&idx=2&sn=99e16c11be6abe9ba7a45fed2141415d&chksm=8caafb89bbdd729f8c1cfb5d6ae065 ...
数据结构与算法
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)等。
window.location.href='https://victorfengming.gitee.io/data_algorithm/';
Java设计模式
设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。
这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。
window.location.href='https://victorfengming.gitee.io/design_pattern/';
笔记本关闭自带键盘的方法
说在前面很多小伙伴在使用笔记本的时候不喜欢使用笔记本自带的键盘,
然后连接外置键盘的时候,又可能会误触到原来的键盘
下面小编教搭建如何关闭笔记本的自带键盘(可恢复)
方式一首先在笔记本电脑桌面的“计算机(我的电脑)”上右键鼠标,然后选择打开“属性”,如下图所示。
2打开系统属性后,点击进入上角的【设备管理器】,如下图所示。
3打开笔记本设备管理器之后,找到【键盘】,点击展开,然后在【PS/2标准键盘】上右键鼠标,然后选择【更新驱动程序软件】,如下示意图所示。
4在接下来的您如何搜索驱动程序软件界面,点击【浏览计算机一查找驱动程序软件】,如下图所示。
5之后会进入浏览计算机上的驱动程序文件选择界面,这里依旧点击底部的【从计算机的设备驱动程序列表中选择】,如下图所示。
6下面的这步“选择要为此硬件安装的设备驱动程序”设置非常重要,首先要将【显示兼容硬件】前面的勾去掉,然后在厂商里,任意选择一个其他笔记本品牌,比如笔者用的是联想笔记本,在这里我们故意选择“宏碁(Acer)”厂商,然后在右侧的型号里,任意选择一个,完成后点击下面的【下一步】,如下图所示。
7最后会弹出一个“不推荐安装这个设备的 ...
vue2-vue3对比
Vue2和Vue3的相比较而言的相关面试题
抱歉:Vue3没有研究那么深,不知道
2020年9月发布的正式版
Vue3支持大多数的Vue2的特性
Vue中设计了一套强大的组合Api代替了Vue2中的option API,复用性更强了更好的支持TS
最主要:Vue3中使用了Proxy配合Reflect 代替了Vue2中Object.defineProperty()方法 实现了数据的响应式(数据代理)
重写了虚拟DOM,速度更快了
新的组件: Fragment(片段) / Teleport(瞬移) / Suspense(不确定)
设计了一个新的脚手架工具,vite
Python脚本实现爬取哔哩哔哩壁纸
12345678910111213141516171819202122232425262728293031323334353637383940414243"""爬虫爬取 哔哩哔哩中 的领克壁纸"""import reimport requestsdef main(): url = "https://www.bilibili.com/read/cv8222028" meizi_html = requests.get(url).text # print(meizi_html) patt = "data-src=\"//i0.hdslb.com/bfs/article/(.*?.\w\wg)\" width" src_list = re.findall(patt,meizi_html) # src = src_list.group(0) i = 0 for src in src_list: i+=1 ...
使用正则表达式替换博客模板中的tags标签
事情是这样的
小编原来的博客是jeklly格式的模板
所以tag是用空格区分的,类似这样的
而新的hexo的格式要求是这样的
正则表达式如下
1(\ntags:.*) (\w+)\n
1$1\n\t- $2\n
匹配思路为从后面一个tag开始替换,直到替换完所有tags
然后,在idea中批量替换,就可以了,多点几次
你点的次数就是,含有最多tag的一篇文章的数量
查看一下一共替换了文件 319个,这要是让我一下一下改,这还不得改到死
你以为这就完了
1(\ntags:.* \w+) +\n
1$1\n
有的tag后面有空格
需要先去掉
一下吓一跳,还有这么多没替换呢
然后重复执行前面的操作
继续替换
知道他没有查询到匹配的内容
然后你以为这样就结束了?
我又发现我还有中文的tag
所以我又优化了一个版本
1(\ntags:.*) (\S+)\n
1$1\n\t- $2\n
这回可真的没了