JAVA抽象概念大揭秘:用生动有趣的方式,带你领略编程的无限可能

news2024/11/19 14:38:44


抽象的概念

  • 抽象类抽象方法是面向对象编程中的重要概念,用于实现抽象和继承的特性。
  • 抽象类是不能被实例化的类,通常用作其他类的基类。
  • 抽象方法是在抽象类中声明但没有具体实现的方法,需要在子类中实现具体的功能。

抽象类的用途

假设我们开了一个汽车玩具厂,现在要造奔驰宝马系列玩具。这两种玩具的功能基本是一致,只是车的喇叭音乐不同。

由于只是车的内置喇叭(trumpet) 不同,那么我们造的时候,我们首先开发一套车的模板 (Car) 即可,车的骨架、内部零件什么的都用一样的。生产奔驰(Benchi) 系列的车,我们去奔驰车间给他装上奔驰的内置喇叭 (Benchi extends Car) ;生产宝马系列的车,我们去宝马(Baoma) 车间给他装上宝马的内置喇叭 (Baoma extends Car)。

现在,我们奔驰系列的车模板和宝马系列的车模板就造好了,出厂每一个车的时候,给车模套上车壳就完工了。

我们把生产汽车模板的过程抽象成一个Car类

d1bd8ee98af95056715eda382eb4b67b.jpeg

由于每个车都必须有喇叭,因此trumpet方法是必须存在的。但每个系列的车喇叭不同,因此,在Car类中,我们无法具体指明方法内容(没有写方法体)。这个trumpet方法就是一个抽象方法, 我们用abstract给他标记一下。

由于Car缺少喇叭、车壳等零件(trumpet是抽象抽象方法,Car因此是抽象类),因此它无法直接生产玩具(不能实例化)。我们需要去不同车间继续完善它 (只能被子类继承、完善方法)

我们去奔驰车间给他装上奔驰的喇叭,奔驰系列玩具的车模就做好了。

b5caa9a6568127d58c64702ae6516351.jpeg

然后,我们去宝马车间给他装上喇叭,宝马系列的玩具车模就做好了

10504b87f2dcd58d1defb5004fde76a3.jpeg

最后,我们在奔驰和宝马车间就可以不断的生产玩具了。

上面的代码中,我们定义了一个sountrumpetd方法,这是Car必须有的方法,但是每个子类(奔驰、宝马)的这个方法是不同的,因此我们无法具体写成这个方法的内容。

那么,这个sound方法就是一个抽象方法,对应的,Car就是一个抽象类。Car是不完整的,因此它不能直接生产成一个玩具车 (不能实例化)。

我们需要用Car这个模板来完善我们的奔驰系列玩具

ed45a62e75b39e45b6dbd94b2536ff58.jpeg

语法详解

抽象类

抽象类使用abstract关键字进行声明,它可以包含抽象方法普通方法

它无法直接创建抽象类的实例,只能通过继承它的子类来使用。抽象类通常用于定义类的共同特征和行为,而将具体的实现细节留给子类来完成。

示例代码:

  • 585768cddb5cd0d8eb5bb331f95ae3ec.jpeg

    声明了一个String类型的变量name,表示车的名称。
  • 定义了一个构造方法Car(String name) ,用于初始化车的名称。
  • 声明了一个非抽象方法run() ,用于输出车名并显示它在跑。
  • 声明了一个抽象方法trumpet() ,没有具体实现,需要在子类中重写。

抽象方法

抽象方法是在抽象类中声明但没有具体实现的方法,它使用abstract关键字进行声明。抽象方法没有方法体,只有方法签名,子类必须实现这些抽象方法,否则子类也必须声明为抽象类。

示例代码:

045e28a28af21b1397d399bfec4517e7.jpeg

780b3804bb1493d94c38e8cf05c18eae.jpeg

抽象类和抽象方法的使用场景:

  • 当某个类的对象不需要直接创建,而只作为其他具体类的基类模板时,可以将该类声明为抽象类。
  • 当多个类拥有相似的行为,但在具体实现上有所不同,可以将共同的行为定义在抽象类中,具体实现交给子类。
  • 抽象类和抽象方法可以帮助实现多态性,即通过父类引用指向子类对象,便于统一处理不同子类的对象。

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

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

相关文章

数据通信——应用层(Telnet与WWW)

一,引言 我们使用交换机和路由器以及其它网络设备时,需要进行一些配置,因此需要登录的设备内部进行操作。登录到设备内部的方法有很多,比如通过console口或者其他串口与对端设备相连,也可以通过wifi无线连接&#xff0…

NET MVC中如何使用Element-Plus

目的 在Net Mvc5或者Net Core Mvc中,我们如何通过cdn的放引入Element-Plus并,使用Element-Plus相关的组件,包含Vue-Icon和多语言的使用。 准备工作 1.这里为了方便,我们直接使用html文件来代替Mvc项目。新建一个index.html文件…

硬件知识:DDR3、DDR4和DDR5内存条有啥区别,看完你就懂

目录 一、DDR3内存 二、DDR4内存 三、DDR5内存 DDR3、DDR4和DDR5是计算机内存类型的名称,代表第三代、第四代和第五代双倍数据速率(Double Data Rate,简称DDR)同步动态随机存取存储器(SDRAM)。 不同内存…

小程序开发平台源码系统 +功能丰富 +有完整搭建教程

大家好啊,今天要给大家分享的这款系统可就厉害了。全新升级的小程序开发平台源码系统,其中包含了15项不同小程序功能,各行各业都有。一起来看看吧。以下是部分功能实现代码: 系统特色功能一览: 一、微同城本地生活服务…

项目管理中,进度管理是决定成败的关键因素!(建议收藏)

项目管理的主要目标在于确保员工充分理解其责任的目的和关键性,从而使其工作更具焦点和步骤性,以实现一目了然的效果。以小王在十字路口为例,项目经理就如同他的指路人,使其明确自己的方向,避免走错路。 在项目中&…

华测监测预警系统 2.2---任意文件读取漏洞

目录 1. 资产搜集 2. 漏洞复现 3. 实战总结 1. 资产搜集 直接上fofa 和 hunter 个人推荐hunter可以看到icp备案公司直接提交盒子就行了 FOFA语法 app”华测监测预警系统2.2” Hunter语法 web.body”华测监测预警系统2.2” 2. 漏洞复现 这里手动复现的,目录是/…

Kylin麒麟系统下安装人大金仓

虚拟机在线安装 install open-vm-tools-desktop -y 简要介绍 人大金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES)是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。金仓数据库主…

设计模式-装饰者模式

装饰者模式-简介 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中,以…

Unity中Shader的深度偏移Offset

文章目录 前言一、深度偏移一般用于什么时候1、深度偏移一般用于两个模型 重合在同一平面时,在其中一个模型上使用深度偏移后,就能区别出两个模型的深度,从而消除闪动2、虽然,可以让两个模型在深度上错开一点点,来解决…

工业级开源facechain人物写真sd-webui插件使用方式

一、简介 facechain人物写真应用自8月11日开源了第一版证件照生成后。目前在github(https://github.com/modelscope/facechain)上已有近6K的star,论文链接:FaceChain: A Playground for Identity-Preserving Portrait Generation…

Linux-JVM-CPU爆表调优

CPU爆表调优 一、自定义一个死循环测试类二、运行TestDemo类三、调优1、执行top命令2、执行ps命令3、执行jstack命令 一、自定义一个死循环测试类 第7行一定会死循环,永远出不去 public class TestDemo {public static void main(String[] args) {new Thread(null,(…

安装mmcv及GPU版本的pytorch及torchvision

一、先装GPU版本的pytorch和torchvision pip install torch1.9.1cu111 torchvision0.10.1cu111 torchaudio0.9.1 -f https://download.pytorch.org/whl/torch_stable.html注意:以上适用cuda11.1版本 如果想离线安装,就看这篇文章 二、安装mmcv 看这篇…

Python学习之Python3.10中match-case的用法和示例

在 Python 3.10 中引入了新的 match-case 语法,它是一种用于模式匹配的结构。它类似于 switch-case 语句,可以根据不同的模式匹配执行不同的代码块。 match-case 语法的基本结构如下: match expression:case pattern1:# 执行代码块1case p…

SpringCloud-Seata

一、介绍 (1)实现分布式事务 (2)解决Spring只支持单机事务 (3)事务ID TC(事务协调者) TM(事务管理者) RM(资源管理者)

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation Paper:https://arxiv.org/pdf/2101.00190.pdf Code:https://github.com/XiangLi1999/PrefixTuning 前缀调优:优化生成的连续提示 prefix-tunning 的基本思想也是想…

西湖大学利用 Transformer 分析百亿多肽的自组装特性,破解自组装法则

多肽是两个以上氨基酸通过肽键组成的生物活性物质,可以通过折叠、螺旋形成更高级的蛋白质结构。多肽不仅与多个生理活动相关联,还可以自组装成纳米粒子,参与到生物检测、药物递送、组织工程中。 然而,多肽的序列组成过于多样&…

瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(上)

TVS二极管具有响应速度快、漏电流小、钳位电压稳以及无寿命衰减的特性,从小到信号线静电防护,大到电力系统抗雷击浪涌,TVS都发挥着至关重要的作用。本章对瞬态抑制二极管TVS工作机理展开分析,供产品选型参考。接下来就跟着深圳比创…

用git stash暂存修改

git stash命令用于保存当前工作目录的临时状态,包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域(即“堆栈”)中,让你能够回到一个干净的工作目录,可以进行其他操作。等到你完成其他任务后&#x…

立即报名 | 云原生 + AI Meetup 成都站 11.4 正式开启

2023 年,KubeSphere 社区已经在深圳、杭州、上海三个城市各组织了一场线下 Meetup。第四站,我们将走进天府成都。 11 月 4 日,云原生 AI Meetup 成都站将正式开启! 此次 Meetup,我们邀请到了蚂蚁集团、云猿生数据、…

系列十二、Redis的主从复制

一、概述 主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据。 二、架构图 三、搭建主从复制 # 1、准备3台机器并修改配置 -- master port 7379-- slave1 port 7380 slaveof masterip masterport-- slave2 port 7381 slaveof masterip masterpor…