Java——抽象类
在Java中,抽象类(Abstract Class) 是一种特殊的类,用于定义部分实现的类结构,同时允许子类提供具体的实现。抽象类通常用于定义通用的行为或属性,而将具体的实现细节留给子类。
1. 抽象类的定义
- 语法:
abstract class 类名 {// 字段// 构造器// 具体方法// 抽象方法 } - 特点:
- 抽象类用
abstract关键字修饰。 - 抽象类可以包含抽象方法(没有方法体的方法)和具体方法(有方法体的方法)。
- 抽象类不能被实例化,只能被继承。
- 抽象类用
2. 抽象类的特性
2.1 抽象方法
- 定义:抽象方法是没有方法体的方法,用
abstract关键字修饰。 - 特点:
- 抽象方法必须在抽象类中定义。
- 子类必须重写抽象方法(除非子类也是抽象类)。
示例:
abstract class Animal {// 抽象方法public abstract void makeSound();// 具体方法public void sleep() {System.out.println("Animal is sleeping.");}
}
2.2 具体方法
- 定义:抽象类可以包含具体方法(有方法体的方法)。
- 特点:
- 具体方法可以被子类直接继承或重写。
- 抽象类可以提供通用的实现,减少代码重复。
示例:
abstract class Animal {// 具体方法public void eat() {System.out.println("Animal is eating.");}
}
2.3 字段和构造器
- 字段:抽象类可以包含字段(成员变量)。
- 构造器:抽象类可以有构造器,但不能直接实例化。构造器用于初始化字段或供子类调用。
示例:
abstract class Animal {private String name;// 构造器public Animal(String name) {this.name = name;}public String getName() {return name;}
}
3. 抽象类的使用
3.1 继承抽象类
- 子类必须重写抽象类中的所有抽象方法(除非子类也是抽象类)。
- 子类可以继承抽象类的具体方法和字段。
示例:
class Dog extends Animal {public Dog(String name) {super(name); // 调用父类构造器}@Overridepublic void makeSound() {System.out.println("Woof! Woof!");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog("Buddy");dog.makeSound(); // 输出: Woof! Woof!dog.eat(); // 输出: Animal is eating.}
}
3.2 抽象类的多态
- 抽象类可以作为引用类型,指向其子类对象。
- 通过抽象类引用调用方法时,实际执行的是子类的方法。
示例:
Animal myAnimal = new Dog("Buddy");
myAnimal.makeSound(); // 输出: Woof! Woof!
4. 抽象类与接口的区别
| 特性 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 方法 | 可以包含抽象方法和具体方法 | Java 8之前只能包含抽象方法 |
| 字段 | 可以包含普通字段和静态字段 | 只能包含静态常量(public static final) |
| 构造器 | 可以有构造器 | 不能有构造器 |
| 多继承 | 不支持多继承 | 支持多继承(一个类可以实现多个接口) |
| 默认方法 | 不支持默认方法 | Java 8支持默认方法(default方法) |
| 设计目的 | 定义通用的类结构 | 定义行为规范 |
5. 抽象类的应用场景
-
定义通用行为:
- 抽象类可以定义通用的方法和字段,供子类继承。
- 示例:
Animal类定义eat()和sleep()方法,子类Dog和Cat继承这些方法。
-
强制子类实现特定行为:
- 抽象类可以定义抽象方法,强制子类提供具体实现。
- 示例:
Animal类定义makeSound()抽象方法,子类Dog和Cat必须实现该方法。
-
代码复用:
- 抽象类可以提供部分实现,减少子类的代码重复。
- 示例:
Animal类提供eat()方法的默认实现,子类可以直接使用或重写。
-
模板方法模式:
- 抽象类可以定义算法的骨架,将具体步骤延迟到子类实现。
- 示例:
Game类定义initialize()、start()和end()方法,子类Football和Cricket实现具体逻辑。
6. 抽象类的注意事项
-
不能实例化:
- 抽象类不能直接创建对象,只能通过子类实例化。
- 示例:
Animal animal = new Animal();会编译错误。
-
构造器的作用:
- 抽象类的构造器用于初始化字段或供子类调用,不能直接实例化。
-
抽象方法的实现:
- 子类必须实现抽象类中的所有抽象方法(除非子类也是抽象类)。
-
与接口的结合:
- 抽象类可以实现接口,提供部分或全部接口方法的实现。
7. 总结
抽象类是Java中用于定义部分实现的类结构的重要工具。它通过抽象方法和具体方法的结合,提供了代码复用和强制子类实现特定行为的能力。抽象类适用于定义通用行为、强制子类实现、代码复用和模板方法模式等场景。
相关文章:
Java——抽象类
在Java中,抽象类(Abstract Class) 是一种特殊的类,用于定义部分实现的类结构,同时允许子类提供具体的实现。抽象类通常用于定义通用的行为或属性,而将具体的实现细节留给子类。 1. 抽象类的定义 语法&…...
Linux CentOS 上 Ollama 的安装与部署:从入门到实践
Linux CentOS 上 Ollama 的安装与部署:从入门到实践 随着人工智能技术的快速发展,大语言模型(LLMs)的应用场景越来越广泛。Ollama 作为一个轻量级的 AI 模型管理工具,为开发者提供了便捷的模型部署和管理解决方案。本文将详细介绍如何在 Linux CentOS 系统上安装和部署 O…...
超级详细Spring AI运用Ollama大模型
大模型工具Ollama 官网:https://ollama.com/ Ollama是一个用于部署和运行各种开源大模型的工具; 它能够帮助用户快速在本地运行各种大模型,极大地简化了大模型在本地运行的过程。用户通过执行几条命令就能在本地运行开源大模型,如Lama 2等; 综上&#x…...
Django项目设计一个简单CRUD
在Django中实现一个学生类(Student)的CRUD(创建、读取、更新、删除)操作需要几个步骤,包括定义模型、创建视图、设置URL、以及配置模板。以下是一个基本的实现步骤: 1. 创建Django项目和应用 首先&#x…...
0083.基于springboot+uni-app的社区车位租赁系统小程序+论文
一、系统说明 基于springbootuni-app的社区车位租赁系统小程序,系统功能齐全, 代码简洁易懂,适合小白学编程。 现如今,信息种类变得越来越多,信息的容量也变得越来越大,这就是信息时代的标志。近些年,计算机科学发展…...
计算机视觉行业洞察--影像行业系列第一期
计算机视觉行业产业链的上下游构成相对清晰,从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类,视觉的硬件主要指芯片、…...
网页请求腾讯云环境的云函数
背景:uniapp,做一个管理后台 需求:在PC端网页请求云环境的云函数 npm npm install cloudbase/js-sdk -S 在APP中,封装匿名登陆,因为未登录时无法请求云函数 app.vue <script>import Vue from vueimport cl…...
【深度学习量化交易15】基于miniQMT的量化交易回测系统已基本构建完成!AI炒股的框架初步实现
我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 AI怎么炒股?就是通过量化交易。 近期D…...
使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统
GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据…...
QT闲记-工具栏
工具栏通常用来放置常用的操作按钮,如QPushButton,QAction等。可以放置在顶部,底部,左侧,右侧,并且支持拖曳,浮动。 1、创建工具栏 通常通过QMainWindow 提供的addToolBar()来创建,它跟菜单栏一样,如果需要工具栏,一般情况下,我们设置这个类的基类为QMainWindow。 …...
JAVA最新版本详细安装教程(附安装包)
目录 文章自述 一、JAVA下载 二、JAVA安装 1.首先在D盘创建【java/jdk-23】文件夹 2.把下载的压缩包移动到【jdk-23】文件夹内,右键点击【解压到当前文件夹】 3.如图解压会有【jdk-23.0.1】文件 4.右键桌面此电脑,点击【属性】 5.下滑滚动条&…...
网络安全之探险
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 因为工作相关性,看着第三方公司出具的网络安全和shentou测试报告就想更深入研究一下,于是乎开始探索网络安全方面的知识,度娘、…...
基础dp——动态规划
目录 一、什么是动态规划? 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划? 动态规划(Dynamic Programming&…...
异常处理在 Promptic 中怎么实现?
在 Promptic 中,异常处理主要通过与 tenacity 库结合来实现,用于处理诸如 API 限流、临时故障等问题。以下是实现异常处理的具体方法和步骤: 1. 使用 tenacity 实现重试机制 tenacity 是一个强大的 Python 库,用于实现重试逻辑&…...
(四)趣学设计模式 之 原型模式!
目录 一、 啥是原型模式?二、 为什么要用原型模式?三、 原型模式怎么实现?四、 原型模式的应用场景五、 原型模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式…...
会话对象 Cookie 四、Cookie的路径
1.Cookie的path属性 Cookie还有一个path属性,可以通过Cookie#setPath(String)方法来设置。你可以使用HttpWatch查看响应中的Set-Cookie中是否存在路径。下面是通过Chrome查看Cookie信息。 也就是说,就算你不设置Cookie的path,Cookie也是有路…...
A. Jagged Swaps
time limit per test 1 second memory limit per test 256 megabytes You are given a permutation†† aa of size nn. You can do the following operation Select an index ii from 22 to n−1n−1 such that ai−1<aiai−1<ai and ai>ai1ai>ai1. Swap aia…...
hugging face---transformers包
一、前言 不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一…...
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南 在现代 Web 开发中,前后端分离架构已经成为主流。然而,在某些场景下,我们可能需要将前端项目(如 Vue)与后端项目(如 Spring Boot)集成部…...
ipad连接电脑断断续续,不断弹窗的解决办法
因为ipad air 屏幕摔坏,换了一个内外屏,想用爱思检验一下屏幕真伪, 连接电脑时,断断续续,连上几秒钟然后就断开,然后又连上 然后又断开,不断地弹出信任的弹窗。 刚开始以为是数据线问题&#x…...
GPIO外设
一、GPIO简介 GPIO,general-purpos IO port,通用输入输出引脚,所有的GPIO引脚都有基本的输入输出功能。 最基本的输出功能:STM32控制引脚输出高、低电平,实现开关控制;最基本的输入功能:检测外部输入电平&…...
C++——priority_queue模拟实现
目录 前言 一、优先级队列介绍 二、优先级队列实现 向上调整 向下调整 三、仿函数 总结 前言 上一篇文章我们讲了stack和queue,这两个容器是容器适配器,本质上是一种复用,那本篇文章要讲的优先级队列也是一个容器适配器,我们…...
计算机网络基础:DOS命令、批处理脚本常见命令
目录 1. DOS 基础命令 1. echo 、 > 编写文件 2. type 读取文件 3. copy con 整段编写 4. attrib 命令 5. 快速生成空文件 6. 修改关联性 7. 关机shutdown 8. 复制文件copy、移动文件move 9. 重命名ren 2. 批处理 2.1 简单显示 2.2 死循环 2.3 定时关机小程序 …...
ArcGIS Pro热力图制作指南:从基础到进阶
引言 在地理信息科学领域,热力图作为一种直观的数据可视化手段,广泛应用于展示空间数据的密度和热度分布。ArcGIS Pro,作为一款强大的地理信息系统(GIS)软件,为我们提供了制作热力图的便捷工具。本文将从基…...
智慧校园系统在学生学习与生活中的应用
随着科技的快速发展,智慧校园系统逐渐成为现代教育不可或缺的一部分。它整合了先进的信息技术、物联网技术以及人工智能等,旨在构建一个全面、智能、个性化的学习与生活环境。对于学生而言,这一系统不仅能够极大地提高学习效率,还…...
深入解析与操作:基于C++的PE文件处理技术揭秘
一、PE文件的核心结构与解析原理 PE(Portable Executable)文件是Windows操作系统下可执行文件的标准格式,其设计目标是支持跨平台的可执行代码和动态链接。要解析或操作PE文件,需深入理解其二进制结构和运行时加载机制。 1. PE文…...
第三十四周学习周报
目录 摘要Abstract1 文献阅读1.1 相关知识1.1.1 贝叶斯优化1.1.2 注意力机制复习 1.2 模型框架1.3 实验分析 总结 摘要 在本周阅读的文献中,作者提出了一种将注意力机制与LSTM相结合的模型AT-LSTM。虽然传统LSTM通过其门控机制能有效捕捉时间序列中的长期依赖关系&…...
22.回溯算法4
递增子序列 这里不能排序,因为数组的顺序是对结果有影响的,所以只能通过used数组来去重 class Solution { public:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums,int start){if(path.si…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
一周学会Flask3 Python Web开发-flask3模块化blueprint配置
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们在项目开发的时候,多多少少会划分几个或者几十个业务模块,如果把这些模块的视图方法都写在app.py…...
