JAVA零基础小白自学日志——第二十二天

文章目录

  • 1.接口的方法
    • [1].先来说说接口的默认方法
    • [2].接口的静态方法
  • 2.接口与抽象类的区别

今日提要:接口的静态方法和默认方法,接口与抽象类的区别

1.接口的方法

首先我们需要明确的是接口是一个抽象方法集,那就会有人问,为啥里面还有默认方法和静态方法,这两种拥有方法体的方法存在,当然这种规则是JDK1.8以后出现的,之前接口只是一个单纯的抽象方法集,那咱们就来说说这两个JDK1.8以后加入接口的方法有什么用处;

[1].先来说说接口的默认方法

  • 我们来想象一种情况,如果一段代码经过一段时间的使用,某个通过校验并运行稳定,并被很多具体类调用的接口需要添加新的功能,我们要怎么办,当然你可以说,我们把新的方法抽象了放进这个接口就好了,那你想过没有,原来的代码是运行稳定的,你放入一个新的抽象方法在接口内,那么所有调用这个接口的具体类,都需要重新覆写这个抽象方法,如果不覆写的话,编译就无法通过,如果代码规模不大,并且你拥有修改这段代码的权限,那么也不是不可以;
  • 但是如果代码的规模比较大,或者你根本没有修改全部代码的权限,那么明显只在接口里面加入一个抽象方法是行不通的,这个时候,JDK1.8提出的接口里的默认方法就可以帮你解决这个问题了;
  • 简单的来说接口里的默认方法就是用于接口升级更新维护使用的
  • 由于默认方法有方法体,所以并不会硬性的要求具体类实例化它,但是可以按需调用或者覆写这个方法,那么原先代码里运行稳定的类,除了必须进行修改的外,别的类可以不用进行更新,这对代码的灵活性和维护起到了极大的帮助;
  • 这里需要注意的是:接口的默认方法与抽象类方法名一样的时候,接口的默认方法优先级低,将被忽略,多个接口内有同样的方法名的方法,并且其中至少有一个为默认方法的时候,这个方法必须被具体类覆写;

[2].接口的静态方法

  • 首先需要明确的是静态方法是一个类方法,同样的它也无需被具体类实例化,它的调用是通过接口名.方法名();来调用的,它的功能很简单,就是提供一个接口函数来满足调用接口的具体类共享数据(多数共享)或者特例调用(特殊需求)
  • 这个应该很好理解,要不就是有个数据大家都要用,大家共享起来比较方便,要不就是这个数据只有极少数具体类需要用,特殊给它提供的,没有什么不好理解的地方,其实和普通类里面的静态方法并没有什么太大的不同;

2.接口与抽象类的区别

项目抽象类接口
构建基础基于IS-A(是一个)建立的,比如:猫是一个哺乳动物,微波炉是一个家用电器基于HAS-A(有一个)建立的,猫有一个捕鼠的能力,狗有一个看护保卫的能力
构造函数有构造函数没有构造函数
抽象方法抽象类里不一定有抽象方法,含有抽象方法的类一定是抽象类,抽象方法不可以被private、fianl、static修饰接口里面的类除了默认和静态(static修饰)方法外,均默认为抽象方法
作用抽象类是子类的模板,它存在的意义就是被子类继承接口提供的是附加功能,可以被多个继承树调用

今天说的东西都比较简单,要去努力肯两天书了,现在很多概念不太好理解,还是需要理解了,才能写出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3-video-play 导入 以及解决报错

npm install vue3-video-play --save # 或者 yarn add vue3-video-play import Vue3VideoPlay from vue3-video-play; import vue3-video-play/dist/style.css; app.use(Vue3VideoPlay) <template><div id"main-container-part"><div class"al…

git配置name和email

git配置name和email 1、下载好git之后&#xff0c;右击git bash&#xff0c;使用git config --global --list 查看配置信息&#xff0c;会出现以下错误 $ git config --global --list fatal: unable to read config file C:/Users/xxx/.gitconfig: No such file or directory…

MySQL常见指令

MySQL中的数据类型 大致分为五种&#xff1a;数值&#xff0c;日期和时间&#xff0c;字符串&#xff0c;json&#xff0c;空间类型 每种类型也包括也一些不同的子类型&#xff0c;根据需要来选择。 如数值类型包括整数类型和浮点数类型 整数类型根据占用的存储空间的不同 又…

spice qxl-dod windows驱动笔记1

KMOD驱动是微软提供的一个Display Only驱动。 Windows驱动的入口函数是 DriverEntry ,所以显示Mini小端口驱动程序也不例外。 和其它Mini小端口驱动的入口函数实现一致&#xff0c;在其 DriverEntry 只做一件事&#xff0c;就是分配系统指定的一个结构体&#xff0c;然后调用框…

Github遇到的问题解决方法总结(持续更新...)

1.github每次push都需要输入用户名和token的解决方法 push前&#xff0c;执行下面命令 &#xff1a; git config --global credential.helper store 之后再输入一次用户名和token之后&#xff0c;就不用再输入了。 2.git push时遇到“fatal: unable to access https://githu…

Meta发布最强AI模型,扎克伯格公开信解释为何支持开源?

凤凰网科技讯 北京时间7月24日&#xff0c;脸书母公司Meta周二发布了最新大语言模型Llama 3.1&#xff0c;这是该公司目前为止推出的最强大开源模型&#xff0c;号称能够比肩OpenAI等公司的私有大模型。与此同时&#xff0c;Meta CEO马克扎克伯格(Mark Zuckerberg)发表公开信&a…

Spring Boot + Shiro 实现 Session 持久化实现思路及遗留问题

目录 引言 项目场景 应用技术 实现思路 问题暴露 解决方案 本人理解 引言 Session 为什么需要持久化? Session 持久化的应用场景很多,诸如: 满足分布式:Session 作为有状态会话,体现在 Sessionid 与生成 Session 的服务器参数相关,在实现机理上不支持分布式部署…

opencv grabCut前景后景分割去除背景

参考&#xff1a; https://zhuanlan.zhihu.com/p/523954762 https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html 环境本次&#xff1a; python 3.10 提取前景&#xff1a; 1、需要先把前景物体框出来 需要坐标信息&#xff0c;可以用windows自带的画图简单提取像素…

Concat() Function-SQL-字符串拼接函数

Concat() Function-SQL 在SQL中&#xff0c;CONCAT() 函数用于将两个或多个字符串连接在一起。 不同数据库管理系统可能有些许差异&#xff0c;但基本用法和语法通常是相似的。 语法 CONCAT(string1, string2, ...)string1, string2, …: 这些是需要连接的字符串参数。可以…

089、Python 读取Excel文件及一些操作(使用openpyxl库)

对于低版本的Excel文件&#xff0c;我们可以使用xlwt/xlrd库&#xff0c;对于高版本的Excel文件(.xlsx)&#xff0c;xlwt/xlrd库从版本2.0.0开始不再支持&#xff0c;所以要读取.xlsx文件&#xff0c;我们需要单独使用openpyxl第三方库。 首先是安装&#xff1a; pip install…

【时序约束】读懂用好Timing_report

一、静态时序分析&#xff1a; 静态时序分析&#xff08;Static Timing Analysis&#xff09;简称 STA&#xff0c;采用穷尽的分析方法来提取出整个电路存在的所有时序路径&#xff0c;计算信号在这些路径上的传播延时&#xff0c;检查信号的建立和保持时间是否满足时序要求&a…

Java并发编程实战读书笔记(二)

对象的组合 在设计线程安全的类时&#xff0c;确保数据的一致性和防止数据竞争是至关重要的。这通常涉及三个基本要素&#xff1a;确定构成对象状态的所有变量&#xff0c;明确约束这些状态变量的不变性条件&#xff0c;以及建立管理对象状态并发访问的策略。 要确定构成对象…

定时器+外部中断实现NEC红外线协议解码

一、前言 1.1 功能介绍 随着科技的进步和人们生活水平的提高&#xff0c;红外遥控器已经成为了日常生活中不可或缺的电子设备之一&#xff0c;广泛应用于电视、空调、音响等多种家电产品中。 传统的红外遥控器通常只能实现预设的有限功能&#xff0c;无法满足用户对设备更加智…

创建vue2/vue3项目

目录 创建一个Vue2项目创建一个Vue3项目 创建一个Vue2项目 ## 安装Vue-Cli &#xff1a; npm install -g vue/cli // Vue CLI 4.x 需要 Node.js v8.9 或更高版本 (推荐 v10 以上)vue --version // 检测版本是否正确## 创建一个项目&#xff1a; vue create hello-world // hel…

TCP客户端connect断线重连

文章目录 TCP客户端connect断线重连1、为什么要断线重连2、实现代码 TCP客户端connect断线重连 1、为什么要断线重连 客户端会面临服务器崩溃的情况&#xff0c;我们可以试着写一个客户端重连的代码&#xff0c;模拟并理解一些客户端行为&#xff0c;比如游戏客户端等. 考虑到…

实战篇(十二):如何使用 Processing 创建一个多功能的简易吃豆人游戏

如何使用 Processing 创建一个多功能的简易吃豆人游戏 文章目录 如何使用 Processing 创建一个多功能的==简易==吃豆人游戏引言准备工作第一步:设置基本框架第二步:创建 Pacman 类第三步:创建 Obstacle 类第四步:添加分数系统第五步:运行游戏完整代码结论参考资料引言 吃…

c++中的哈希查找(Hash Search)和B树查找(B-Tree Search)

前言 hello大家好啊&#xff0c;我是文宇&#xff0c;不是文字&#xff0c;是文宇哦&#xff0c;这期也是关于查找算法的。 哈希查找&#xff08;Hash Search&#xff09; 哈希查找&#xff08;Hash Search&#xff09;是一种基于哈希表的查找算法&#xff0c;它可以在常数时…

STL常用算法——常用查找算法

自定义类型都要用仿函数判断 1.find() class Person { public:Person(string name,int age){this->m_Name name;this->m_Age age;}bool operator(const Person &p)//重载operator{if (this->m_Name p.m_Name && this->m_Age p.m_Age){return true;…

【云原生】NameSpace名称空间详解

名称空间 文章目录 名称空间一、名字空间二、何时使用多个名称空间三、初始名称空间3.1、default3.2、kube-node-lease3.3、kube-public3.4、kube-system 四、通过名称空间共享集群4.1、查看名称空间4.2、获取名称空间详细信息4.3、名称空间的两种状态4.4、创建名称空间4.5、删…

NVIDIA 全面转向开源 GPU 内核模块

NVIDIA 全面转向开源 GPU 内核模块 文章目录 NVIDIA 全面转向开源 GPU 内核模块支持的 GPU安装程序更改使用带有 CUDA 元包的包管理器 使用运行文件使用安装帮助脚本包管理器详细信息dnf&#xff1a;Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypp…