【Java笔记】第10章:接口
- 前言
- 1. 接口的概念与定义
- 2. 接口的声明与语法
- 3. 接口的实现
- 4. 接口的继承
- 5. 接口的默认方法
- 6. 接口的静态方法
- 7. 接口的私有方法
- 8. 接口的作用
- 9. 接口与抽象类的区别
- 10. 接口在Java集合中的应用
- 结语
上期回顾:【Java笔记】第9章:三个修饰符
个人主页:C_GUIQU
归属专栏:【Java学习】
前言
各位小伙伴大家好!上期小编给大家讲解了Java中的三个修饰符,接下来讲讲Java中的接口!
1. 接口的概念与定义
Java接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态常量。接口定义了一个规范,规定了实现接口的类应具备哪些方法。接口不能被实例化,但可以被实现(implements)或继承(extends)。
2. 接口的声明与语法
接口的声明以关键字interface
开始,后面跟着接口的名称。接口中可以定义抽象方法和静态常量。
接口的语法如下:
public interface InterfaceName {// 静态常量int SOME_CONSTANT = 10;// 抽象方法void abstractMethod();
}
3. 接口的实现
一个类通过implements
关键字来实现接口。实现接口的类必须实现接口中所有的抽象方法,否则该类必须声明为抽象类。一个类可以实现多个接口。
public class MyClass implements InterfaceName {// 实现接口中的抽象方法public void abstractMethod() {System.out.println("实现接口的抽象方法");}
}
4. 接口的继承
接口可以通过extends
关键字继承另一个接口。一个接口可以继承多个接口,相当于扩展了接口的方法和常量。
public interface NewInterface extends InterfaceName {// 新的抽象方法void newAbstractMethod();
}
5. 接口的默认方法
Java 8引入了默认方法(default method),允许接口提供方法的实现。默认方法是非抽象的,可以有方法体。实现类可以选择性地覆盖默认方法。
public interface InterfaceName {// 默认方法default void defaultMethod() {System.out.println("这是默认方法");}
}
6. 接口的静态方法
Java 8也允许接口定义静态方法(static method)。静态方法不能被实现类覆盖,只能通过接口名调用。
public interface InterfaceName {// 静态方法static void staticMethod() {System.out.println("这是静态方法");}
}
7. 接口的私有方法
Java 9引入了私有方法(private method),允许接口内部定义私有方法。私有方法可以是静态的或非静态的,用于辅助实现接口的默认方法。
public interface InterfaceName {// 私有方法private void privateMethod() {System.out.println("这是私有方法");}// 调用私有方法的默认方法default void defaultMethod() {privateMethod();}
}
8. 接口的作用
接口在Java中主要用于实现多态、解耦和定义规范。通过接口,可以隐藏实现类的具体细节,只暴露必要的操作,提高代码的可维护性和扩展性。
9. 接口与抽象类的区别
- 接口只能定义抽象方法和静态常量,而抽象类可以定义抽象方法和具体方法,可以有构造器,可以有成员变量。
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 接口主要用于定义公共的方法规范,抽象类主要用于共享代码和实现。
10. 接口在Java集合中的应用
Java集合框架(Collection Framework)广泛使用接口。例如,List
、Set
和Map
都是接口,它们定义了集合操作的规范。具体的集合类如ArrayList
、HashSet
和HashMap
实现了这些接口,提供了不同的集合操作实现。
结语
接口是Java语言中一个重要的概念,它提供了一种定义规范和实现多态的机制。通过接口,可以隐藏实现细节,提高代码的灵活性和可维护性。随着Java语言的发展,接口的功能也在不断增强,如默认方法、静态方法和私有方法的引入,使得接口更加灵活和强大。
至此,Java的接口讲解完毕。
感谢您的观看!互三必回!持续更新中~!
相关文章:
【Java笔记】第10章:接口
前言1. 接口的概念与定义2. 接口的声明与语法3. 接口的实现4. 接口的继承5. 接口的默认方法6. 接口的静态方法7. 接口的私有方法8. 接口的作用9. 接口与抽象类的区别10. 接口在Java集合中的应用结语 上期回顾:【Java笔记】第9章:三个修饰符 个人主页:C_G…...
Angular知识概览
Angular 是一个由 Google 维护的开源前端框架,用于构建动态网页应用。以下是对 Angular 主要概念和特性的概览: 1. Angular 的核心概念 - 组件 (Component):Angular 应用的基本构建块。每个组件包括一个 TypeScript 类,用于处理数…...
经典文献阅读之--Online Monocular Lane Mapping(使用Catmull-Rom样条曲线完成在线单目车道建图)
0. 简介 对于单目摄像头完成SLAM建图这类操作,对于自动驾驶行业非常重要,《Online Monocular Lane Mapping Using Catmull-Rom Spline》介绍了一种仅依靠单个摄像头和里程计生成基于样条的在线单目车道建图方法。我们提出的技术将车道关联过程建模为一个…...
frida timed out
从Android Q(10)开始,Google引入了一种新的机制,加快了app的启动时间 Android USAP 进程启动流程 adb shell su ps -A | grep usaproot 9917 1032 6577052 13676 __skb_wait_for_more_packets 0 S usap64 root 9928 1032 6577052…...
51单片机-独立按键控制灯灯灯
目录 简介: 一. 1个独立按钮控制一个灯例子 二. 在加一个独立按键,控制第二个灯 三. 第一个开关 开灯, 第二个开关关灯 四. 点一下开灯,在点一下关灯 五. 总结 简介: 51 单片机具有强大的控制能力,而独立按键则提供了一种简单的输入方式。 当把独立按键与 …...
【C++】用红黑树封装map、set
用红黑树封装map、set 1. 红黑树1.1 模板参数的控制1.1.1 Value1.1.2 KeyOfValue 1.2 正向迭代器1.2.1 构造函数1.2.2 begin()end()1.2.3 operator()1.2.4 operator--()1.2.5 operator*()1.2.6 operator->()1.2.7 operator()1.2.8 operator!()1.2.9 总代码 1.3 反向迭代器1.…...
【中颖】SH79F9202 串口通信
头文件 uart.h #ifndef UART_H #define UART_H#include "SH79F9202.h" #include "LCD.h" #include "timer2.h" #include "timer5.h" #include "cpu.h" #include "key.h" #include "io.h" #include &qu…...
IDEA创建Maven项目
IDEA创建Maven项目 第一步:创建新项目 或者 第二步:创建maven模块 前提条件: File>>Settings,检查自己的maven是否已经安装配置好 创建maven模块 其中Archetype一般选择如下 点击创建后生成如下 需要在main目录下创…...
[每周一更]-(第100期):介绍 goctl自动生成代码
在自己组件库中,由于部分设计会存在重复引用各个模板的文件,并且基础架构中需要基础模块内容,就想到自动生成代码模板,刚好之前有使用过goctl,以下就简单描述下gozero中goctl场景和逻辑,后续自己借鉴将自…...
碳素钢化学成分分析 螺纹钢材质鉴定 钢材维氏硬度检测
碳素钢的品种主要有圆钢、扁钢、方钢等。经冷、热加工后钢材的表面不得有裂缝、结疤、夹杂、折叠和发纹等缺陷。尺寸和允许公差必须符合相应品种国家标准的要求。 具体分类、按化学成分分类 : 碳素钢按化学成分(即以含碳量)可分为低碳钢、中…...
C++ list链表的使用和简单模拟实现
目录 前言 1. list的简介 2.list讲解和模拟实现 2.1 默认构造函数和push_back函数 2.2 迭代器实现 2.2.1 非const正向迭代器 2.2.2 const正向迭代器 2.2.3 反向迭代器 2.3 插入删除函数 2.3.1 insert和erase 2.3.2 push_back pop_back push_front pop_front 2.4 构…...
dependencies?devDependencies?peerDependencies
之前使用的npm包中,我用到了sass包。我当时没有在packagejson中添加依赖项,而是另外install的。这就引起了我的一个思考 初步想法: 我的npm包需要使用sass,那么我应该放在dependencies中,当使用的时候会直接下载 问题…...
在LUAT中使用MQTT客户端,游戏脚本,办公脚本自动操作
本文将介绍在LUAT中工程化使用MQTT客户端的方法及注意事项。实验平台为合宙AIR724UG,其固件版本为Luat_V4001_RDA8910_FLOAT_TMP。 面向对象 使用middleclass库为脚本提供基础面向对象支持,将此repo中的middleclass.lua文件添加到项目中即可使用。middl…...
如何解决maven中snapshot相关jar无法拉取问题
Maven中的SNAPSHOT版本是指正在开发中的版本,这些版本可能会频繁地更新。在使用Maven构建项目时,有时会遇到无法拉取SNAPSHOT相关jar的问题。以下是几种常见的解决方案: 1. 检查Maven配置文件(settings.xml) 确保你的M…...
类似crossover的容器软件有哪些 除了crossover还有什么 Mac虚拟机替代品
CrossOver是Mac用来运行exe文件的一款软件,但是并不是所有的exe文件CrossOver都支持运行。想要在Mac上运行exe文件的方法并不是只有使用CrossOver这一种,那么有没有类似的软件也可以实现exe文件在Mac上运行呢? CrossOver类似软件有哪些 1、Pl…...
以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】
【Less-54】 与前面的题目不同是,这里只能提交10次,一旦提交超过十次,数据会重新刷新,所有的步骤需要重来一次。 解题步骤: 根据测试,使用的是单引号闭合。 # 判断字段的数量 ?id1 order by 3 -- aaa# …...
详解 Flink 的时间语义和 watermark
一、Flink 时间语义类型 Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳Ingestion Time :是数据进入 Flink…...
Unreal Engine项目结构与关卡设置详解
引言 Unreal Engine 是一款功能强大的游戏引擎,为开发者提供了丰富的工具来创建和管理游戏项目。本文将详细介绍一个基本的 Unreal Engine 项目结构,并讲解如何在 Unreal 编辑器中进行关卡设置与操作。 Unreal Engine 项目结构 一个基本的 Unreal Eng…...
Access数据中的SQL偏移注入
使用场景: 目标数据表的字段较多,无法一一获取的时候,尝试使用偏移注入的方式实现SQL注入。 原理: 例如:一个表有6个字段,而你想获取的目标表admin的字段不知道,此时可以使用联合查询的方式获…...
Unity 编辑器扩展,获取目录下所有的预制件
先看演示效果 实现方案 1创建几个用于测试的cube 2,创建一个Editor脚本 3,编写脚本内容 附上源码 using UnityEditor; using UnityEngine;public class GetPrefeb : EditorWindow {private string folderPath "Assets/Resources"; // 指定预…...
【Python】解决Python报错:ValueError: not enough values to unpack (expected 2, got 1)
文章目录 引言1. 错误详解2. 常见的出错场景2.1 函数返回值解包2.2 遍历含有不同长度元组的列表 3. 解决方案3.1 检查和调整返回值3.2 安全的解包操作 4. 预防措施4.1 使用异常处理4.2 单元测试 结语 引言 在Python编程中,ValueError 是一个常见的异常类…...
政安晨【零基础玩转各类开源AI项目】解析开源:gradio:改进真实虚拟试穿的扩散模型
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! Gradio 是一个开源 Python 软件包,可以让你…...
深入解读Prometheus Adapter:云原生监控的核心组件
一、引言 Prometheus Adapter的背景与重要性 在现代的云原生架构中,微服务和容器化技术得到了广泛的应用。这些技术带来了系统灵活性和扩展性的提升,但同时也增加了系统监控和管理的复杂度。Prometheus作为一款开源的监控系统,因其强大的指标…...
【计算机视觉】数字图像处理基础:以像素为单位的图像基本运算(点运算、代数运算、逻辑运算、几何运算、插值)
0、前言 在上篇文章中,我们对什么是数字图像、以及数字图像的组成(离散的像素点)进行了讲解🔗【计算机视觉】数字图像处理基础知识:模拟和数字图像、采样量化、像素的基本关系、灰度直方图、图像的分类。 我们知道&a…...
Spring Boot整合WebSocket和Redis实现直播间在线人数统计功能
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
uniapp自定义的下面导航
uniapp自定义的下面导航 看看效果图片吧 文章目录 uniapp自定义的下面导航 看看效果图片吧 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6aa0e964741d4dd3a58f4e86c4bf3247.png) 前言一、写组件、我这里就没有写组件了直接写了一个页面?总结 前言 在…...
【Python】selenium使用find_element时解决【StaleElementReferenceException】问题的方法
StaleElementReferenceException 是 Selenium WebDriver 中的一种异常,通常在元素与当前页面的状态不同步时抛出,比如页面已经刷新或导航到另一个页面,但是尝试操作的元素引用仍然是旧页面上的元素。 以下是一些解决 StaleElementReferenceE…...
Apache IoTDB 分布式架构三部曲(三)副本与共识算法
IoTDB 首创并应用的共识协议统一框架,为用户提供了灵活选择不同共识算法的可能性。 对于一个分布式集群而言,为了使得海量数据场景下集群能够横向扩展,集群需要按照一定的规则将全部数据分成多个子集存储在不同的节点上,从而能够更…...
数据挖掘--聚类分析:基本概念和方法
数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 聚类分析 聚类分析是把一个数据对象&…...
APP单页分发源码下载安卓苹果自动识别apk描述文件免签自动安装
下载地址:APP单页分发源码下载安卓苹果自动识别apk描述文件免签自动安装...
淮北哪里做网站/关键词是网站seo的核心工作
具有密度函数 的分布叫做拉普拉斯分布;是位置参数, 是尺度参数。拉普拉斯分布的期望为 ,方差为 ,偏度为0,峰度为3。拉普拉斯分布的密度函数,可以看作是两个指数分布函数的概率密度“背靠背”拼接在一起。&a…...
如何用wordpress做视频网站/北京网络营销策划公司
一、进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓…...
wordpress页面重定向循环/一份完整的市场调查方案
Web应用安全依然是互联网安全的最大威胁来源之一,除了传统的网页和APP,API和各种小程序也作为新的流量入口快速崛起,更多的流量入口和更易用的调用方式在提高web应用开发效率的同时也带来了更多和更复杂的安全问题。一方面,传统的…...
网站的交互体验/搜索引擎优化的目的是对用户友好
上海工程技术大学C语言考试试卷一、选择题(本题共15小题,每小题2分,共30分)1.下列字符串能作为变量名的是()A)3int B)float C)_2xy D)break2.以下选项中可作为C语言合法整数的是(A)1010B B)0287 C)0x02h3 D)0x0ffa3.下列正确的C语句是(A)x2 B)scanf(“%d…...
wordpress电影网盘/最新行业动态
workbox 是 GoogleChrome 团队推出的一套 Web App 静态资源本地存储的解决方案,该解决方案包含一些 Js 库和构建工具,在 Chrome Submit 2017 上首次隆重面世。而在 workbox 背后则是 Service Worker 和 Cache API 等技术和标准在驱动。在 Workebox 之前&…...
导购网站如何做/微信推广链接怎么制作
动态代理分为Java SDK 动态代理以及cglib动态代理,这里先了解下Java SDK动态代理 Java SDK动态代理代码demo: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class JDKDynamic…...