当前位置: 首页 > news >正文

【学习总结|DAY015】Java面向对象高级-抽象类、接口

引言

在今天的课程中,我们详细探讨了 Java 编程语言的几个核心特性:多态、final 关键字、抽象类和接口。这些概念是面向对象编程的基础,对于构建健壮、可维护的应用至关重要。本文将通过具体的例子和解释帮助大家更好地掌握这些知识点。

一、final 关键字

final 是 Java 中一个非常强大的关键字,它可以应用于类、方法和变量:

  1. final 类: 被声明为 final 的类不能被继承,这保证了此类的设计不会被更改或扩展。

  2. final 方法: 子类无法覆盖父类中被标记为 final 的方法,这对于确保方法的实现不被意外地修改非常有用。

  3. final 变量: 被 final 修饰的变量一旦被初始化便不能再被修改。这在常量的定义中非常常见,例如数学常数 π 或 e。

二、单例设计模式

单例模式是一种常用的软件设计模式,它确保一个类仅有一个实例,并提供全局访问点。以下是两种常见的实现方式:

  1. 饿汉式单例: 在类加载时就创建实例,这种方式简单但不够灵活。

    public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
    }
    
  2. 懒汉式单例: 只有当第一次调用 getInstance() 时才会创建实例,提高了灵活性。

    public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized(Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
    }
    

三、枚举

枚举 (enum) 是一种特殊的类,允许我们定义一组固定的常量。它们有以下优点:

  • 默认实现了 Comparable 和 Serializable 接口。
  • 可以添加自定义方法,使枚举更强大和灵活。
  • 天然线程安全。
public enum Color {RED, GREEN, BLUE;public String getColorCode() {// 返回颜色对应的编码}
}

四、抽象类

抽象类使用 abstract 关键字声明,主要用于以下场景:

  • 包含抽象方法(没有具体实现的函数)。
  • 不能直接实例化,需要子类去实现其抽象方法。
public abstract class Animal {public abstract void makeSound();public void eat() {System.out.println("Animal is eating");}
}class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Woof!");}
}

五、接口

接口(interface) 是 Java 中另一种完全抽象的约定,其中所有的字段默认都是 public static final,而所有的方法默认都是 public abstract。从 Java 8 开始,接口还可以包含默认方法和静态方法。

public interface Drawable {default void draw() {System.out.println("Drawing...");}static int getMaxValue() {return Integer.MAX_VALUE;}
}

结语

通过对多态、final、抽象类和接口的学习,我们可以更加灵活地设计和组织我们的代码结构。希望这篇文章能帮助你巩固这些重要的 Java 概念,并在实际开发中得心应手!

相关文章:

【学习总结|DAY015】Java面向对象高级-抽象类、接口

引言 在今天的课程中,我们详细探讨了 Java 编程语言的几个核心特性:多态、final 关键字、抽象类和接口。这些概念是面向对象编程的基础,对于构建健壮、可维护的应用至关重要。本文将通过具体的例子和解释帮助大家更好地掌握这些知识点。 一…...

单词拼写纠正-04-161.力扣 相隔为 1 的编辑距离

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…...

深入理解 NumPy 广播机制:从基础到应用

目录 什么是广播机制?广播机制的规则广播机制示例1. 一维数组与标量运算2. 二维数组与一维数组运算3. 维度不同的数组运算4. 广播失败的情况 广播机制的实际应用场景1. 数据归一化2. 批量计算欧氏距离 总结广播机制的核心要点: 在使用 NumPy 进行数组操作…...

Springboot(五十三)SpringBoot3整合redisson

前边我们有记录Springboot2/3整合redis的方式。是基于Springboot默认集成的Lettuce客户端实现的。 今天我们在项目中集成的redission是在Lettuce之上构建的redis客户端。 Redisson:一个在Jedis和Lettuce之上构建的Redis客户端。提供了一系列分布式Java对象和服务,比如:分布式…...

UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)

UAC2.0 speaker 系列文章 UAC2.0 speaker——单声道 USB speaker(16bit) UAC2.0 speaker——类特殊请求 UAC2.0 speaker——音量控制 UAC2.0 speaker——多采样率支持 UAC2.0 speaker——24/32bit 支持 UAC2.0 speaker——speaker 数据传输 UAC2.0 speaker——同时支持 16bi…...

P2562 [AHOI2002] Kitty猫基因编码

P1498P2562 [AHOI2002] Kitty猫基因编码 #include <iostream> using namespace std; #include <cmath> #include <vector> #include <string> string encode(string str){if(str.find("0") string::npos) return "B";if(str.fin…...

HarmonyOS(65) ArkUI FrameNode详解

Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在Node…...

40分钟学 Go 语言高并发:负载均衡与服务治理

负载均衡与服务治理 一、知识要点总览 模块核心内容技术实现难度负载策略轮询、权重、最小连接数自定义负载均衡器中服务降级服务降级、熔断降级、限流降级Hystrix模式高熔断机制熔断器状态机、失败计数、自动恢复Circuit Breaker高限流设计令牌桶、滑动窗口、计数器Rate Lim…...

Python 从入门到实战45(Pandas数据操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;可以熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们学习了pandas数据读写的相关基础知识。今天学习一下…...

node js 历史版本下载

此为node历史版本下载地址 https://nodejs.org/dist/https://nodejs.org/dist/...

无代码探索AI大模型:腾讯云函数计算的卓越实践

在数字化转型的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术已经成为企业提升竞争力的关键。然而&#xff0c;对于许多业务人员来说&#xff0c;技术门槛高、开发周期长等问题限制了他们快速探索和应用AI大模型的能力。同时&#xff0c;对于缺乏GPU资源的开发者来…...

网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术

网页数据抓取&#xff1a;融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代&#xff0c;网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持&#xff0c;成为了进行网页数据抓取的首选语言。在众多的爬虫库中&#xff0c;BeautifulSoup和Scra…...

vivado中,generate output product 和Create HDL wrapper的作用

generate output product 以zynq的ip核举例&#xff0c;没有generate output product之前&#xff0c;在ip source 什么也看不到。 但是同样的一个ip核&#xff0c;generate output product之后&#xff0c;会生成综合&#xff0c;布线和仿真文件&#xff0c;约束文件等等。 …...

欧盟R156法规注意事项及实例展示

欧盟 R156 法规即《关于批准车辆的软件升级和软件升级管理体系统一规定的法规》&#xff0c;其注意事项及实例如下&#xff1a; 注意事项&#xff1a; 软件升级管理体系方面&#xff1a; 体系建立与维持&#xff1a;汽车制造商和供应商必须建立完善的软件升级管理体系&#xff…...

HTML语义化的案例分析

HTML语义化的案例分析&#xff1a;对比实际网站中语义化与非语义化标签的差异 在现代Web开发中&#xff0c;HTML语义化被广泛认为是提升网页结构和可访问性的重要做法。HTML语义化不仅仅是为了让代码更清晰&#xff0c;更是为了增强搜索引擎优化&#xff08;SEO&#xff09;&a…...

使用 pyperclip 进行跨平台剪贴板操作

简介&#xff1a;pyperclip 是一个轻量级的 Python 库&#xff0c;支持在不同操作系统&#xff08;Windows、macOS、Linux&#xff09;中进行剪贴板的复制和粘贴。这个库的设计简单易用&#xff0c;非常适合需要频繁进行文本复制粘贴操作的场景。 历史攻略&#xff1a; 使用f…...

微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档

要解决此问题&#xff0c;需打开微信小程序开发者工具进行设置&#xff0c;打开详情-本地设置重新运行&#xff0c;该报错就没有啦...

Java:181 基于springboot的考编论坛管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统一共管理员&#xff0c;用户角色。 主要功能&#xff1a;收货地址管理、经验交流平台管理、公告信息管理、跳蚤市场管理、商品留言管理、商品订…...

通义千问sft-甄嬛对话

流程步骤 https://www.datawhale.cn/activity/110/21/76?rankingPage1 按照上面的流程&#xff0c;准备好数据之后就可以直接对7b的模型进行指令微调了&#xff0c;整个流程不是很复杂&#xff0c;操作起来比较方便。但是发布服务等了较长时间&#xff0c;以为出了bug 结果展…...

如何配置Jackson以忽略Java类中为null或空(empty)的字段

Jackson库提供了JsonInclude注解和ObjectMapper配置选项&#xff0c;可以用来控制是否在JSON输出中包含null或空值的字段。 默认情况下&#xff0c;Jackson会包含所有字段&#xff0c;不论其值为何。 本教程将展示如何使用Include.NON_NULL来忽略null值字段&#xff0c;以及使…...

设置笔记本同时连接内外网

原理&#xff1a;通过笔记本和手机相连&#xff0c;实现双网卡功能能。笔记本连接内网wifi、同时手机端开启usb网络共享&#xff0c;笔记本就有了两个网&#xff0c;然配置那个访问外网&#xff0c;那个访问内网。 1.笔记本wifi连接内网wifi 2.手机端共享网络。 手机打开 -【…...

让文章更具说服力:如何巧妙运用逻辑

在写作的过程中&#xff0c;不论是创作小说、撰写学术论文&#xff0c;还是撰写营销文案&#xff0c;逻辑的运用都至关重要。一个没有逻辑支撑的文章&#xff0c;很容易让读者产生困惑、迷失方向&#xff0c;甚至失去阅读兴趣。因此&#xff0c;如何巧妙地运用逻辑&#xff0c;…...

阿里云云服务器Docker-Execrise

申请云服务器 阿里云每个人可以免费申请三个月的使用的服务器可以用作学习使用建议申请规格2核4g的&#xff0c;2g的有点捉襟见肘了选择服务器建议alibaba-linux服务器&#xff0c;就是linux&#xff1b;选择windows可能由于2核4g的限制&#xff0c;docker不匹配系统起码我就是…...

解决 MySQL 启动失败与大小写问题,重置数据库

技术文档&#xff1a;解决 MySQL 启动失败与大小写问题&#xff0c;重置数据库 1. 问题背景 在使用 MySQL 时&#xff0c;可能遇到以下问题&#xff1a; MySQL 启动失败&#xff0c;日志显示 “permission denied” 或 “Can’t create directory” 错误。MySQL 在修改配置文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

【C++】指针与智慧的邂逅:C++内存管理的诗意

文章目录 RAII 智能指针auto_ptrunique_ptr shared_ptr模拟实现定制删除器循环引用 和 weak_ptr RAII RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种广泛应用于 C 等编程语言中的编程范式&#xff0c;它的核心思想是&#xff1a;资源的获取和释放…...

python中的高阶函数

1、什么是高阶函数&#xff1f; 高阶函数是指将函数作为参数传入。就是高阶函数 2、高阶函数有哪些&#xff1f; map 映射函数 >>> print(list(map(lambda x:x*x,range(1,11)))) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> print(list(map(lambda x:st…...

spark关联hive 报 Filesystem Close 错误

请看如下问题&#xff1a; 假如我想将一个sql语句插入hive表中时&#xff0c;比如 insert into table tmp.app_user_active_range partition (dt2022-11-04) 报如下错误&#xff1a; 我的环境是pyspark&#xff0c;pyspark中操作hive,使用datagrip关联spark&#xff0c;在da…...

MySQL主从同步详解

文章目录 MySQL主从同步概述MySQL主从同步原理MySQL主从同步结构模式MySQL主从同步搭建搭建步骤一主一从实验环境master主机slave1主机验证主从同步 一主多从master主机slave2主机验证主从同步 MySQL主从同步复制模式 读写分离技术MaxScale简介部署MaxScale服务器授权用户maste…...

Python 单元测试基础脚本

单元测试的概念&#xff1a; 单元测试是针对程序中最小可测试单元进行检查和验证的过程。在Python中&#xff0c;通常一个函数或方法就是一个测试单元。 unittest框架&#xff1a; Python自带了一个名为unittest的单元测试框架&#xff0c;它受JUnit启发&#xff0c;为开发者提…...

鸿蒙开发-在ArkTS中实现socket功能

基本概念 在 ArkTS 中实现 Socket 功能主要涉及到网络通信中的套接字(Socket)编程。Socket 是一种用于在不同设备(如客户端和服务器)之间进行双向通信的接口&#xff0c;它允许应用程序发送和接收数据。在网络编程中&#xff0c;有两种主要的 Socket 类型&#xff1a;基于 TCP…...

【设计模式系列】策略模式(二十四)

一、什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是软件设计模式中的一种行为型模式。它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互换使用&#xff0c;算法的变化不会影响使用算法的用户。策略模式让算法的变化独立于…...

D92【python 接口自动化学习】- pytest基础用法

day92 pytest的skip和skipif用法 学习日期&#xff1a;20241208 学习目标&#xff1a;pytest基础用法 -- pytest的skip和skipif用法 学习笔记&#xff1a; 测试用例跳过 skip和skipif用法&#xff0c;测试用例跳过 pytest.mark.skip 跳过标记的用例 pytest.mark.skipif(1 …...

spring中的@Bean和@Component有什么区别?

定义和作用范围 Bean&#xff1a; 是一个方法级别的注解。它主要用于在Java配置类&#xff08;使用Configuration注解的类&#xff09;中定义一个Bean。这个方法返回的对象会被Spring容器管理。例如&#xff0c;假设我们有一个配置类AppConfig&#xff1a; import org.sprin…...

docker入门

安装 官方下载 系统&#xff1a;CentOS 7.9 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo启动docker 关机后下次开机又得执行 sudo systemctl start dock…...

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…...

MySQL高可用之MHA

华子目录 MHA概述为什么要用MHA什么是MHAMHA的组成MHA的特点故障切换备选主库的算法 MHA工作原理MHA环境搭建环境准备开始部署MHAMHA软件使用介绍配置MHA的管理环境创建MHA管理的模板文件 测试 模拟故障MySQL-master切换手动切换&#xff08;在master存活状态下切换&#xff09…...

区块链——基本概念、技术原理

一、区块链基本概念 &#xff08;一&#xff09;区块链定义 区块链&#xff08;Blockchain&#xff09;是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。通俗一点说&#xff0c;区块链技术就指一种全民参与记账的方式&#xff0c;是一种防篡改、共享的、可…...

docker 部署共享文档ZFile

1、拉取ZFile镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/tirling-pdf/zfile:latest 2、创建文件夹和进入文件夹 mkdir zfile && cd zfile 3、创建docker-compose.yml配置文件。 vim docker-compose.yml version: 3.3 service…...

C# 自定义组件实现表格的多层表头功能

在 WinForms 中&#xff0c;想要实现多层表头功能时&#xff0c;DataGridView 本身并不支持该功能&#xff0c;而且又不希望使用第三方控件&#xff0c;因此选择通过自定义组件来实现这一需求。 首先&#xff0c;展示一下程序实现的效果&#xff1a; 接下来&#xff0c;创建一…...

给Squid代理添加HTTP basic认证

HTTP basic认证是一种简单的认证机制&#xff0c;要求用户在请求资源前提供有效的用户名和密码。 实例: 给Squid代理添加HTTP basic认证 要求: 只允许用户名为peter,密码为123的请求通过认证, 其他请求返回407(Proxy认证失败) 步骤 1 使用htpasswd工具&#xff0c;生成用户…...

使用伪装IP地址和MAC地址进行Nmap扫描

使用伪装IP地址和MAC地址进行Nmap扫描 在某些网络设置中&#xff0c;攻击者可以使用伪装的IP地址甚至伪装的MAC地址进行系统扫描。这种扫描方式只有在可以保证捕获响应的情况下才有意义。如果从某个随机的网络尝试使用伪装的IP地址进行扫描&#xff0c;很可能无法接收到任何响…...

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …...

剑指Offer-1 存在重复元素

记录学习过程 题目连接 题目连接 题目描述 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例一、 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 解释&…...

react跳转传参的方法

传参 首先下载命令行 npm react-router-dom 然后引入此代码 前面跳转的是页面 后面传的是你需要传的参数接参 引入此方法 useLocation()&#xff1a;这是 react-router-dom 提供的一个钩子&#xff0c;用于获取当前路由的位置对象location.state&#xff1a;这是从其他页面传…...

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤

&#x1f399;告诉你&#xff1a;Java是世界上最美好的语言 &#x1f48e;比较擅长的领域&#xff1a;前端开发 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 作者有话说 …...

CSS学习记录04

CSS边框 CSS border 属性指定元素边框的样式、宽度和颜色。border-style 属性指定要显示的边框类型。dotted - 定义点线边框dashed - 定义虚线边框solid - 定义实线边框double - 定义双边框groove - 定义3D坡口边框&#xff0c;效果取决于border-color值ridge - 定义3D脊线边框…...

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…...

vue3【实战】图表【组件封装】Chart ( 原生 ECharts ,支持自适配屏幕缩放,动态响应图表配置修改)

效果预览 技术方案 vue3 ( vite | TS | AutoImport ) Element Plus UnoCSS ECharts 技术要点 ECharts 实例的类型 let myChart: echarts.ECharts | null null默认生成随机 id id: {type: String,default: () > Math.random().toString(36).substring(2, 8)},深度监听图…...

Oracle系统性能监控工具oswatcher演示

1、关于 OSW OSWatcher 的使用符合 Oracle 的标准许可条款&#xff0c;并且不需要额外的许可即可使用&#xff01;&#xff01;&#xff01;&#xff01; OSWatcher (oswbb) 是一种 UNIX shell 脚本的集合&#xff0c;主要用于收集和归档操作系统和网络的度量&#xff0c;以便…...