自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)
自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)
- 一、final关键字
- 1、认识final关键字
- 2、final修饰变量的注意
- 3、常量
- 二、单例类(设计模式)
- 1、设计模式的概念
- 2、单例设计模式
- 3、单例类有很多形式
- 4、懒汉式单例类
- 5、小结
- 三、枚举类
- 1、认识枚举类
- 2、枚举类的常见应用场景
- 四、抽象类
- 1、认识抽象类
- 1、抽象类的注意事项、特点
- 2、小结
- 2、使用抽象类的好处
- 小结
- 3、模板方法设计模式
- 小结
- 五、接口
- 1、接口的概述
- 小结
- 2、接口好处
- 3、接口的综合小案例
- 4、JDK8开始,接口新增的三种方法
- 小结
- 5、接口的注意事项
- 6、综合案例
一、final关键字
1、认识final关键字
final关键字是最终的意思,可以修饰:类、方法、变量。
∙ \bullet ∙修饰类:该类被称为最终类,特点是不能被继承了。
∙ \bullet ∙修饰方法:该方法被称为最终方法,特点是不能被重写。
∙ \bullet ∙修饰变量:该变量有且仅能被赋值一次。
2、final修饰变量的注意
∙ \bullet ∙final修饰基本类型的变量,变量存储的数据不能被改变。
∙ \bullet ∙final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。
3、常量
二、单例类(设计模式)
1、设计模式的概念
∙ \bullet ∙一个问题通常由n钟解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。
∙ \bullet ∙设计模式有20多种,对应20多种软件开发中会遇到的问题。
2、单例设计模式
∙ \bullet ∙作用:确保某个类只能创建一个对象。
写法,实现步骤:
∙ \bullet ∙把类的构造器私有。
∙ \bullet ∙定义一个类变量记住类的一个对象。
∙ \bullet ∙定义一个类方法,返回对象。
3、单例类有很多形式
∙ \bullet ∙饿汉式单例:拿对象时,对象早就创建好了。
∙ \bullet ∙懒汉式单例:拿对象时,才开始创建对象。
4、懒汉式单例类
∙ \bullet ∙用对象时,才开始创建对象。
写法:
∙ \bullet ∙把类的构造器私有。
∙ \bullet ∙定义一个静态变量用于存储对象。
∙ \bullet ∙提供一个静态方法,保证返回的是同一个对象。
5、小结
三、枚举类
1、认识枚举类
∙ \bullet ∙枚举类是一种特殊类。
枚举类的写法:
特点:
∙ \bullet ∙枚举类中的第一行,只能写枚举类的对象名称,且要用逗号隔开。
∙ \bullet ∙这些名称,本质是常量,每个常量都记住了枚举类的一个对象。
2、枚举类的常见应用场景
∙ \bullet ∙枚举类很适合做信息分类和标志。
四、抽象类
1、认识抽象类
∙ \bullet ∙在Java中有一个关键字叫:abstract,它就是抽象类的意思,可以用它修饰类、成员方法。
∙ \bullet ∙abstract修饰类,这个就是抽象类。
∙ \bullet ∙abstract修饰方法,这个方法就是抽象方法。
1、抽象类的注意事项、特点
∙ \bullet ∙抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类。
∙ \bullet ∙类有的成员:成员变量、方法、构造器,抽象类都可以有。
∙ \bullet ∙抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
∙ \bullet ∙一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
2、小结
2、使用抽象类的好处
∙ \bullet ∙父类知道每个子类都要做某个行为,但是每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态。
小结
3、模板方法设计模式
∙ \bullet ∙提供一个方法作为完成某类功能的模板,模板方法封装了每个实现步骤,但允许子类提供特定步骤的实现。
∙ \bullet ∙模板方法设计模式可以提高代码的复用、并简化子类设计。
写法
∙ \bullet ∙ 1、定义一个抽象类。
∙ \bullet ∙ 2、在里面定义2个方法
①一个是模板方法:把共同的实现步骤放里面去。
②一个是抽象方法:不确定的实现步骤,交给具体的子类来完成。
多学一招
建议使用final关键字修饰模板方法,为什么?
∙ \bullet ∙ 模板方法是给子类直接使用的,不能被子类重写。
∙ \bullet ∙ 一旦子类重写了模板方法,模板方法就失效了。
小结
五、接口
1、接口的概述
∙ \bullet ∙Java提供了一个关键字interface定义接口。
∙ \bullet ∙注意:接口不能创建对象
∙ \bullet ∙接口是用来被类实现(implements)的,实现接口的类称为实现类,一个类可以同时实现多个接口。
小结
2、接口好处
∙ \bullet ∙弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。
∙ \bullet ∙让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)。
3、接口的综合小案例
4、JDK8开始,接口新增的三种方法
∙ \bullet ∙增强了接口的能力,更便于项目的扩展和维护。
小结
5、接口的注意事项
6、综合案例
相关文章:

自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)
自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口) 一、final关键字1、认识final关键字2、final修饰变量的注意3、常量 二、单例类(设计模式)1、设计模式的概念2、单例设计模式3、单例类有很多形式4、懒汉式单例类5、小…...
Hutool - Cache:简单而强大的缓存实现
目录 1. 缓存简介 2. 引入依赖 3. 常见缓存类型及使用示例 3.1 FIFO 缓存(先进先出缓存) 3.2 LRU 缓存(最近最少使用缓存) 3.3 定时缓存 4. 缓存的基本操作 5. 总结 1. 缓存简介 在软件开发中,缓存是一种常用的…...

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”
本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型,但通过命令行运行的本地模型,问答的交互也要使用命令行,体验并不是很好。这期分享几个第三方客户端,涵盖了桌…...
Python 基础-循环
目录 简介 break continue 小结 简介 要计算123,我们可以直接写表达式: >>> 1 2 3 6要计算123...10,勉强也能写出来。 但是,要计算123...10000,直接写表达式就不可能了。 为了让计算机能计算成千上…...
Java和SQL测试、性能监控中常用工具
下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具,并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试:JUnit/TestNG: 用于编写单元测试和集成测…...

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略
目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统(DBMS)架构与 SQL 注入 什么是 SQL 注入? SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入? 数据库分类 数据库类型&am…...
【ArcGIS Pro二次开发】(87):样式_Style的用法
.Stylx类型的文件即为样式库文件,保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...

DEX-EE三指灵巧手:扩展AI与机器人研究的边界
DEX-EE三指灵巧手,由Shadow Robot与Google DeepMind合作开发,以其先进技术和设计,正在引领AI与机器人研究的新趋势。其高精度传感器和灵活的机械手指,能够捕捉复杂的环境数据,为强化学习实验提供了可靠支持。 Shadow R…...
简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题
简站主题以其简洁的设计风格、实用的功能、优化的SEO性能和高安全性而受到广泛好评。 简洁:简站主题采用扁平化设计风格,界面简洁明了,提供多种布局和颜色方案,适合各种类型的网站,如个人博客和企业网站。 实用&…...
23种设计模式 - 责任链
模式定义 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许多个对象按链式顺序处理请求,直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求。 模式结构…...
Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)
目录 第一章:Regular Joins 深度解析 1.1 核心原理与适用场景 1.2 电商订单 - 商品实时关联案例 1.2.1 数据流设计 1.2.2 Doris 表设计优化 1.2.3 性能调优要点 第二章:Interval Joins 实战应用 2.1 时间区间关联原理 2.2 优惠券使用有效性验证 2.2.1 业务场景说明 …...

算法——舞蹈链算法
一,基本概念 算法简介 舞蹈链算法(Dancing Links,简称 DLX)是一种高效解决精确覆盖问题的算法,实际上是一种数据结构,可以用来实现 X算法,以解决精确覆盖问题。由高德纳(Donald E.…...
【复现DeepSeek-R1之Open R1实战】系列6:GRPO源码逐行深度解析(上)
目录 4 GRPO源码分析4.1 数据类 GRPOScriptArguments4.2 系统提示字符串 SYSTEM_PROMPT4.3 奖励函数4.3.1 accuracy_reward函数4.3.2 verify函数4.3.3 format_reward函数 4.4 将数据集格式化为对话形式4.5 初始化GRPO Trainer 【复现DeepSeek-R1之Open R1实战】系列3࿱…...

若依Flowable工作流版本监听器使用方法
1.前言 本文详细介绍如何在若依Flowable工作流版本(RuoYi-Vue-Flowable)中配置执行监听器和任务监听器。是以我二次开发的代码为基础,介绍如何配置监听器,已解决源码在新增或删除监听器出现的问题,如果需要二次开发的…...
机器视觉--图像的运算(乘法)
一、引言 在图像处理领域,Halcon 是一款功能强大且广泛应用的机器视觉软件库。它提供了丰富的算子和工具,能够满足各种复杂的图像处理需求。图像的乘法运算作为其中一种基础操作,虽然不像一些边缘检测、形态学处理等操作那样被频繁提及&…...

突破反爬困境:从服务端渲染到客户端SPA,爬虫环境的演变与新挑战(一)
声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的,旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...

matlab下载安装图文教程
【matlab介绍】 MATLAB是一款由美国MathWorks公司开发的专业计算软件,主要应用于数值计算、可视化程序设计、交互式程序设计等高科技计算环境。以下是关于MATLAB的简要介绍: MATLAB是MATrix LABoratory(矩阵实验室)的缩写&#…...
七、敏捷开发工具:持续集成与部署工具
一、敏捷开发工具——持续集成与部署工具 持续集成(CI)与持续部署(CD)是现代敏捷开发中不可或缺的关键实践。通过自动化构建、测试和部署流程,团队可以快速反馈、提高代码质量,并加速产品交付。为此,持续集成与部署工具应运而生,它们能够帮助开发团队在整个开发周期内…...

重看Spring聚焦BeanDefinition分析和构造
目录 一、对BeanDefinition的理解 (一)理解元信息 (二)BeanDefinition理解分析 二、BeanDefinition的结构设计分析 (一)整体结构体会 (二)重要接口和类分析 三、构造 BeanDef…...

2025年新型智慧城市整体解决方案下载:顶层规划设计,应用总体建设方案
一、引言 随着信息技术的飞速发展和城市化进程的加速,智慧城市已成为未来城市发展的新趋势。新型智慧城市通过深度融合物联网、大数据、云计算、人工智能等先进技术,旨在实现城市管理的智能化、精细化和服务的人性化,提升城市治理效能&#…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...