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

深入解析Java面向对象三大特征之多态、final、抽象类与接口

面向对象编程(OOP)的三大核心特征为封装、继承、多态,其中多态是最具灵活性和扩展性的特性。本文将从多态的本质出发,结合final关键字、抽象类与接口的设计,深入探讨这些概念的应用场景及其在代码中的实现细节,帮助读者构建更健壮、可维护的Java程序。

一、多态:灵活性的基石

1. 多态的本质

多态是指同一行为在不同对象下具有不同的表现形式。其实现依赖于继承或接口实现,具体表现为:

  • 对象多态:父类引用指向子类对象(如 People p = new Student())。

  • 行为多态:子类重写父类方法后,调用同一方法时执行不同的逻辑。

代码示例:(纯语法,无意义)

class Animal {public void cry() {System.out.println("动物叫");}
}class Dog extends Animal {@Overridepublic void cry() {System.out.println("汪汪汪");}
}class Cat extends Animal {@Overridepublic void cry() {System.out.println("喵喵喵");}
}// 多态调用
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.cry(); // 输出:汪汪汪
animal2.cry(); // 输出:喵喵喵

2. 多态的优势与问题

优势

  • 解耦与扩展性:通过父类类型接收子类对象,新增子类时无需修改原有代码。

  • 统一接口:定义方法时使用父类形参,可兼容所有子类对象。

问题与解决方案
多态下无法直接调用子类独有的方法。需通过类型转换解决:

常量的定义

  • 自动类型转换:子类对象赋值给父类变量(向上转型)。

  • 强制类型转换:父类变量转换为子类类型(向下转型),需结合instanceof检查类型以避免ClassCastException

    if (animal1 instanceof Dog) {Dog dog = (Dog) animal1;dog.bark(); // 调用子类独有方法
    }

    二、final关键字:不可变性的守护者

    final关键字用于修饰类、方法和变量,强制约束其不可变性:

  • 修饰类:类不可被继承(如String类)。

  • 修饰方法:方法不可被重写(如Object类中的getClass())。

  • 修饰变量:变量仅能赋值一次。

    • 基本类型:值不可变(如final int x = 10)。

    • 引用类型:引用地址不可变,但对象内部状态可变(如final List<String> list = new ArrayList<>())。

public class Constants {public static final String SCHOOL_NAME = "jl教育";
}

三、抽象类:模板化设计的利器

1. 抽象类的定义与特点

  • 使用abstract修饰,可包含抽象方法(无方法体)和具体方法。

  • 不能实例化,需子类继承并实现所有抽象方法。

示例

public abstract class Animal {private String name;public abstract void cry(); // 抽象方法public String getName() {return name;}
}

2. 模板方法设计模式

抽象类的经典应用场景,解决代码重复问题:

  • 模板方法:定义通用流程(用final修饰防止子类覆盖)。

  • 抽象方法:子类实现差异化逻辑。

代码示例

public abstract class DataProcessor {// 模板方法(final修饰)public final void process() {readData();processData();saveData();}protected abstract void processData(); // 子类实现
}

四、接口:多继承的救星

1. 接口的核心特性

  • 使用interface定义,支持多实现(类可同时实现多个接口)。

  • JDK 8后新增默认方法静态方法私有方法,增强扩展能力。

示例

public interface Flyable {void fly(); // 抽象方法default void land() { // 默认方法System.out.println("正在降落");}static void showInfo() { // 静态方法System.out.println("飞行器接口");}
}

2. 接口与抽象类的区别

特性抽象类接口
多继承不支持支持多实现
方法实现可包含具体方法JDK8前仅抽象方法
设计目的定义模板

定义行为契约

五、实践中的应用场景

  1. 多态:结合工厂模式,动态创建对象。

  2. 抽象类:定义通用算法骨架(如JUnit的TestCase)。

  3. 接口:实现策略模式,灵活切换业务逻辑。

六、总结

  • 多态通过动态绑定提升代码灵活性,但需谨慎处理类型转换。

  • final通过约束不可变性增强代码安全性。

  • 抽象类接口分别侧重代码复用与行为定义,二者结合可构建高扩展架构。

掌握这些核心概念,能够显著提升代码的可维护性和可扩展性,为复杂系统设计奠定坚实基础。

相关文章:

深入解析Java面向对象三大特征之多态、final、抽象类与接口

面向对象编程&#xff08;OOP&#xff09;的三大核心特征为封装、继承、多态&#xff0c;其中多态是最具灵活性和扩展性的特性。本文将从多态的本质出发&#xff0c;结合final关键字、抽象类与接口的设计&#xff0c;深入探讨这些概念的应用场景及其在代码中的实现细节&#xf…...

jmeter 循环控制器遍历列表中的数据

jmeter遍历列表中的数据并使用if控制器做相应的处理 测试场景请求获取列表接口发送请求JSON Extractor 提取对应字段 Loop Controller计数器If Controller 测试场景 请求获取列表接口使用循环控制器遍历接口&#xff0c;根据state字段判断是否发起其他请求 请求获取列表接口 …...

【Linux内核系列】:进程板块与文件板块的综合

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 人生中成功只是一时的&#xff0c;失败却是人生的主旋律&#xff0c;但是如何面对失败却把人分成了不同的样子&#xff0c;有的人会被…...

深入理解嵌入式开发中的三个重要工具:零长度数组、container_of 和 typeof

在嵌入式开发中,内核开发者经常需要处理复杂的数据结构和动态内存分配。零长度数组、container_of 宏和 typeof 是内核开发中三个非常重要的工具,它们在结构体管理、内存操作和类型处理中发挥着关键作用。本文将详细探讨这三个工具的功能、应用场景及其在内核开发中的重要性。…...

第27周JavaSpringboot git初识

Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期&#xff0c;由于开发者众多&#xff0c;协作成本很高&#xff0c;后来使用了 BitKeeper 工具来辅助协作…...

实战2. 利用Pytorch解决 CIFAR 数据集中的图像分类为 10 类的问题——提高精度

实战2. 利用Pytorch解决 CIFAR 数据集中的图像分类为 10 类的问题——提高精度 前期准备加载数据建立模型模型训练质量指标 让我们回到图像分类问题 CIFAR。 你的主要任务&#xff1a;实现整个模型训练流程&#xff0c;并在测试样本上获得良好的准确度指标值。 任务积分&#…...

CentOS高性能数据处理优化指南

在CentOS系统中&#xff0c;为实现高性能数据处理&#xff0c;需要从多个层面进行优化&#xff0c;包括系统配置、内核参数、硬件资源管理及软件优化等。 一、硬件优化 选择合适硬件是优化性能的基础&#xff0c;大规模数据处理任务建议使用多核CPU、大容量内存、SSD存储以及…...

深度剖析:Pytest Fixtures如何重塑自动化测试的可读性与高效性

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在编写单元测试时&#xff0c;是否发现自己写了很多相同/相似代码呢&#xff1f; 像…...

AIP-181 稳定级别

编号181原文链接AIP-181: Stability levels状态批准创建日期2019-02-18更新日期2019-02-18 虽然不同组织&#xff08;谷歌或其他组织&#xff09;拥有不同的产品生命周期&#xff0c;AIP使用以下术语指代API组件 稳定性 。 注意 这些稳定级别大致对应于Google Cloud中的产品发…...

比较 (leetcode 452. 用最少数量的箭引爆气球 leetcode 435. 无重叠区间 leetcode 56. 合并区间

leetcode系列 文章目录 一、射箭引爆气球二、无重叠区间三、合并区间总结 提示&#xff1a;小白个人理解&#xff0c;如有错误敬请谅解&#xff01; 对于此类题目&#xff0c;都先按左区间排序&#xff0c;之后根据重叠还是不重叠来进行操作 一、射箭引爆气球 找到最大的重叠…...

什么是有限元力学?分而治之,将复杂问题转化为可计算的数学模型

有限元力学是应用有限元方法&#xff08;Finite Element Method, FEM&#xff09;解决力学问题的学科&#xff0c;属于计算力学的重要分支。它通过将复杂的连续体结构离散化为有限个简单单元的组合&#xff0c;结合数学和物理原理&#xff0c;近似求解力学行为&#xff08;如应…...

python项目一键加密,极度简洁

在要加密的项目内运行python -m pip install py2safe 安装后cd到项目的根目录,运行py2safe 它会递归加密所有文件夹,不需要参数,拿过来就用,基于pyarmor开发,基本破解不了,太方便辣 这是readme文件,不仅提到了用法,还贴心的加入了口腔溃疡的治疗办法,真是太贴心了 # py2saf…...

STM32 ADC原理与驱动详解:从存储器映射到多通道采集(下) | 零基础入门STM32第六十六步

主题内容教学目的/扩展视频ADC读电位器和光敏重点课程电路原理&#xff0c;跳线设置&#xff0c;ADC功能分析&#xff0c;驱动程序&#xff0c;读出AD数据&#xff0c;读内部温度传感器数据。会设置参数&#xff0c;能读出AD值即可。 师从洋桃电子&#xff0c;杜洋老师 本文深入…...

JxBrowser 8.5.0 版本发布啦!

• 为 Compose Desktop 提供了硬件加速渲染支持 • 支持自定义 Chromium 二进制文件的品牌标识 • 多项质量改进 了解更多 获取 30 天免费试用...

LIN接口

LIN接口 前言LIN接口简介帧格式同步间隔段 (Break Field)同步段 (Sync Byte Field)受保护ID段 (Protected Identifier Field)数据段 (Data Field)校验和段 (Checksum Field) 帧在总线上的传输波形帧类型无条件帧事件触发帧偶发帧诊断帧保留帧 错误类型 IP 设计结构框图接口设计…...

【蓝桥杯每日一题】3.16

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x 目录 3.9 高精度算法 一、高精度加法 题目链接&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 解题代码&#xff1a; 二、高精度减法 题目链接&#xff1a; 题目描述&…...

prometheus-helm的使用

1、部署Prometheus监控平台 1、下载安装Prometheus &#xff08;当前集群版本1.26.3&#xff09; git clone https://github.com/prometheus-operator/kube-prometheus.git -b release-0.12 安装&#xff1a; cd kube-prometheus/ 创建命名空间和crd&#xff1a; kubectl …...

时间序列分析的军火库:AutoTS、Darts、Kats、PaddleTS、tfts 和 FancyTS解析

引言:时间序列分析的现代挑战 时间序列分析在多个领域中扮演着关键角色,包括工程、金融、气象、工业预测等。随着开源工具的快速发展,开发者可以通过多种库快速实现时间序列预测与分析。本文将对 AutoTS、Darts、Kats、PaddleTS、tfts 和 FancyTS 六大主流库进行详细解析,…...

TLSR8355F128芯片特色解析

TLSR8355F128 是泰凌微推出的一款高性能、低功耗的无线物联网芯片&#xff0c;具有以下特色&#xff1a; 丰富的协议支持&#xff1a;支持 2.4GHz 私有协议。这使得该芯片能够广泛应用于各种特殊的物联网场景&#xff0c;实现不同设备之间的互联互通。强大的处理能力&#xff…...

基于分类算法的学习失败预警(上)

文章目录 前言1.数据预处理1.1数据探索1.2数值化处理1.3空值填充1.4添加标签1.5特征筛选1.6数据集类别平衡1.7划分数据集1.8训练集类平衡1.9标准化 2.模型选择2.1建立模型2.2模型调参2.2.1遍历调参2.2.2网格搜索 结语 前言 本次案例通过对现有数据分析&#xff0c;采用如下图所…...

首页性能优化

首页性能提升是前端优化中的核心任务之一&#xff0c;因为首页是用户访问的第一入口&#xff0c;其加载速度和交互体验直接影响用户的留存率和转化率。 1. 性能瓶颈分析 在优化之前&#xff0c;首先需要通过工具分析首页的性能瓶颈。常用的工具包括&#xff1a; Chrome DevTo…...

整形在内存中的存储(例题逐个解析)

目录 一.相关知识点 1.截断&#xff1a; 2.整形提升&#xff1a; 3.如何 截断&#xff0c;整型提升&#xff1f; &#xff08;1&#xff09;负数 &#xff08;2&#xff09;正数 &#xff08;3&#xff09;无符号整型&#xff0c;高位补0 注意&#xff1a;提升后得到的…...

python中多重继承和泛型 作为模板让子类实现具体业务逻辑

示例代码&#xff1a; T TypeVar("T", bound"NoSQLBaseDocument")# 与 MongoDB 数据库交互的基础文档类 class NoSQLBaseDocument(BaseModel, Generic[T], ABC):id: UUID4 Field(default_factoryuuid.uuid4)def __eq__(self, value: object) -> bool…...

2025 香港 Web3 嘉年华:全球 Web3 生态的年度盛会

自 2023 年首届香港 Web3 嘉年华成功举办以来&#xff0c;这一盛会已成为全球 Web3 领域规模最大、影响力最深远的行业活动之一。2025 年 4 月 6 日至 9 日&#xff0c;第三届香港 Web3 嘉年华将在香港盛大举行。本届活动由万向区块链实验室与 HashKey Group 联合主办、W3ME 承…...

ERC-6909 最小多代币标准

ERC-6909 Token标准是 ERC-1155 Token标准的一种简化替代方案。 ERC-1155 标准引入了一种多Token接口&#xff0c;使得单个智能合约能够结合可替代的和不可替代的Token&#xff08;即&#xff0c;​ERC20 和 ERC721&#xff09;。 ERC-1155 解决了多个挑战&#xff0c;例如降…...

07-单链表-单链表基本操作

题目 来源 826. 单链表 - AcWing题库 思路 详见代码&#xff0c;主要思想就是用数组来模拟链表的创建。数组其实跟静态链表等价&#xff0c;由于动态链表动态new对于大数据太过于耗时&#xff0c;因此采用数组的方式。那数组如何起到链表的效果&#xff1f;用下标来索引。 …...

FFMPEG录制远程监控摄像头MP4

手绘效果图 上图是录制功能的HTML前端页面&#xff0c;录制功能和解码视频放在一起。录制功能关键是录制(开始录制按钮)、停止录像按钮。当点击“录制”的时候则会开始录制MP4文件, 当点击停止的时候就会停止录制MP4。经过录制后&#xff0c;则会生成MP4,并放到我的RV1126的/tm…...

Spring Boot 的自动装配

Spring Boot 的自动装配&#xff08;Auto Configuration&#xff09;是其核心特性之一&#xff0c;通过智能化的条件判断和配置加载机制&#xff0c;极大简化了传统 Spring 应用的配置复杂度。其原理和实现过程可概括为以下几个关键点&#xff1a; 一、核心触发机制&#xff1a…...

Python中的“泛型”和“多重继承”

“泛型”和“多重继承”属于 Python 的语法规则。 1. 泛型&#xff08;Generic[T]&#xff09; 通俗解释 泛型允许你在定义类或函数时&#xff0c;不指定具体的类型&#xff0c;而是使用一个“占位符”&#xff08;通常命名为 T&#xff09;。这就像你制作一个盒子&#xff0…...

【C++】多参数构造函数使用explict的情形

在 C 中&#xff0c;“无非默认值” 指的是&#xff1a;构造函数的参数没有设置默认值&#xff08;即所有参数都必须显式传递&#xff09;。这个说法通常出现在讨论多参数构造函数是否需要使用 explicit 关键字时。 具体解释 多参数构造函数&#xff1a; • 如果一个构造函数有…...

C# Unity 唐老狮 No.10 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho C# 1. 内存中&#xff0c;堆和…...

使用DeepSeek,优化斐波那契数函数,效果相当不错

下面这段代码定义了一个递归函数 fibonacci&#xff0c;用于计算第 n 个斐波那契数。 def fibonacci(n):if n < 1:return nelse:return fibonacci(n - 1) fibonacci(n - 2)虽然代码逻辑正确&#xff0c;但其性能较差&#xff0c;尤其是对于较大的 n 值&#xff0c;其复杂度…...

【GPT入门】第22课 langchain LCEL介绍

【GPT入门】第22课 langchain LCEL介绍 1. LCEL介绍与特点2. 原生API与LCEL的对比2. 简单demo 1. LCEL介绍与特点 LCEL 即 LangChain Expression Language&#xff0c;是 LangChain 推出的一种声明式语言&#xff0c;用于简化和优化在 LangChain 框架内构建复杂链和应用的过程…...

市场监管总局升级12315平台 专项整治四大市场顽疾保障消费安全

大湾区经济网湾区财经讯&#xff0c;在今天下午举行的国务院新闻办新闻发布会上&#xff0c;市场监管总局负责人表示&#xff0c;将开展食品非法添加、假冒伪劣、价格欺诈、虚假宣传四大领域专项整治行动&#xff0c;并强化缺陷产品召回监管&#xff0c;全面保障消费者“安全消…...

FineBI6.x进阶篇-可视化专题

参考 参考&#xff1a;https://edu.fanruan.com/video/526 如何选择合适的图表&#xff1a;https://help.fanruan.com/dvg/doc-view-3.html 参考&#xff1a;https://help.fanruan.com/finebi/ 什么是GLAD原则&#xff1a;https://help.fanruan.com/dvg/doc-view-81.html …...

一对一交友App源码开发新趋势:精准匹配与多元盈利模式解析

一、 营商环境分析&#xff1a;机遇与挑战并存 近年来&#xff0c;随着移动互联网的普及和用户需求的不断升级&#xff0c;一对一交友App市场呈现出蓬勃发展的态势。然而&#xff0c;机遇与挑战并存&#xff0c;开发者需要审时度势&#xff0c;才能在激烈的市场竞争中脱颖而出…...

算法基础篇(蓝桥杯常考点)

算法基础篇 前言 算法内容还有搜索&#xff0c;数据结构&#xff08;进阶&#xff09;&#xff0c;动态规划和图论 数学那个的话大家也知道比较难&#xff0c;放在最后讲 这期包含的内容可以看目录 模拟那个算法的话就是题说什么写什么&#xff0c;就不再分入目录中了 注意事…...

【Pandas】pandas Series cat

# Pandas2.2 Series ## Accessors |方法|描述| |-|:-------| |Series.str|对 Series 中的字符串元素进行矢量化字符串操作| |Series.cat|用于处理分类数据&#xff08;Categorical Data&#xff09;的属性| ### pandas.Series.cat pandas.Series.cat 是用于处理分类数据&am…...

Python的类和对象(3)

1、类的继承 父类&#xff1a;被继承 子类&#xff1a;继承者 – 可以使用父类的所有属性和方法、大大简化代码。 语法&#xff1a;在类名字后加上&#xff08;继承的类名字&#xff09; # 定义类 -- 父类 class Car:# 定义类属性wheel "有车轮"engine "有引…...

C语言修饰符汇总详解

在C语言中,修饰符(或称类型限定符)是用于修饰数据类型的关键字,可以改变变量或类型的性质和行为。它们通常用来控制存储类型、符号、大小、对齐、访问权限等。C语言中的修饰符主要可以分为以下几类: 类型修饰符存储类别修饰符常量和易变修饰符以下是C语言中所有修饰符的详…...

猎豹移动(Cheetah Mobile)

本文来自腾讯元宝 公司背景与发展历程 ​成立与早期定位 猎豹移动成立于2010年11月&#xff0c;由金山安全与可牛影像合并而成&#xff0c;初期以移动安全工具和清理软件为核心业务。其明星产品包括《猎豹清理大师》&#xff08;Clean Master&#xff09;和《猎豹浏览器》&…...

VLN 论文精读(二)VL-Nav: Real-time Vision-Language Navigation with Spatial Reasoning

这篇笔记用来描述2025年发表在arxiv上的一篇有关VLN领域的论文&#xff0c;由纽约州立大学布法罗分校和卡耐基梅隆联合发布。其主要创新点在于&#xff1a;像素级的视觉-语意特征、低算力移动设备部署、30Hz控制实时性、VLM模型的zero-shot &#xff1b; 整个导航流程大概如下…...

优选算法系列(2.滑动窗口 _ 上)

目录 解法⼀&#xff08;暴力求解&#xff09;&#xff08;不会超时&#xff0c;可以通过&#xff09;&#xff1a;一.长度最小的子数组&#xff08;medium&#xff09; 题目链接209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 代码&#…...

RK3568 android11 基于PN7160的NXP NFC移植

一,概述 1. 模块概述 PN7160专为在各种系统实现快速集成而设计,支持所有符合NFC Forum的模式,包括Android和Linux驱动程序,并支持实时操作系统和无操作系统的应用(PN7160不符合EMVCo)。嵌入式NFC固件减少了对主机交互的需求,并最大限度缩小了代码尺寸,使设计更轻松。…...

【网工第6版】第1章 计算机网络概论

目录 1计算机网络形成和发展 ■计算机网络 ■我国互联网发展 ■计算机网路分类 ■计算机网络应用 2 OSI和TCP/IP参考模型 ■网络分层的意义 ■OSI参考模型 ■TCP/IP参考模型 ■TCP/IP参考模型协议 3 数据封装与解封过程 ■封装 ■解封 1计算机网络形成和发展 ■计…...

【嵌入式】keil5安装(同时兼容C51和STM32)

最近在开发STM32的时候&#xff0c;安装Keil5&#xff0c;遇到STM32和C51的共存的问题&#xff0c;在网上找了很多方法&#xff0c;又遇到一些bug&#xff0c;最终还是弄好了。因此将处理的过程记录下来&#xff0c;希望对遇到相同问题的朋友一些启发。 1、下载安装包 Keil P…...

每日一题--进程与协程的区别

进程是什么&#xff1f; 进程&#xff08;Process&#xff09; 是操作系统进行 资源分配和调度的基本单位&#xff0c;代表一个正在执行的程序实例。每个进程拥有独立的虚拟地址空间、代码、数据和系统资源&#xff08;如文件句柄、网络端口等&#xff09;。进程之间通过 IPC&…...

网络安全运维应急响应与溯源分析实战案例

在日常运维过程中&#xff0c;网络安全事件时有发生&#xff0c;快速响应和精准溯源是保障业务稳定运行的关键。本文将通过一个实际案例&#xff0c;详细解析从发现问题到溯源定位&#xff0c;再到最终解决的完整流程。 目录 一、事件背景 二、事件发现 1. 监控告警触发 2…...

leetcode29. 两数相除-medium

1 题目&#xff1a;两数相除 官方标定难度&#xff1a;中 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。…...

深海300米的低温环境中的BMS优化方法

在深海300米的低温环境中&#xff0c;采用扩展卡尔曼滤波&#xff08;EKF&#xff09;结合温度补偿模型实现电池管理系统&#xff08;BMS&#xff09;的荷电状态&#xff08;SOC&#xff09;精确估计&#xff0c;需通过以下步骤实现&#xff1a; 1. 低温电池模型建立 1.1 电池…...