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

Java 抽象类

文章目录

    • 1、抽象方法和抽象类
    • 2、抽象类的作用

当编写一个类时,常常会为该类定义一些方法,用于描述该类的行为方式,这些方法都有具体的方法体。但在某些情况下,某个基类只是知道其子类应该包含那些方法,但不知道子类是如何实现这些方法的。

如何让一个基类只包含方法签名,又无需提供方法的具体实现?

使用抽象方法即可满足该要求:抽象方法是只有方法签名,没有方法实现的方法。

利用抽象类和抽象方法,可以更好的发挥多态的优势,使程序更加灵活。

1、抽象方法和抽象类

抽象方法:使用修饰符 abstract 来修饰的方法(抽象方法不能有方法体)。

public abstract void abstractMethod(); // 注意此时没有方法体 {},直接;结尾
public abstract void abstractMethod(){ } // 直接报错,因为有方法体 {}

抽象类:使用修饰符 abstract 来修饰的类(抽象类里可以没有抽象方法)。

public abstract class AbstractClass { } // 该抽象类里什么都没有

注:

1、含有抽象方法的类只能被定义成抽象类。

2、含有抽象方法的类的三种情况:

  • 直接定义了一个抽象方法。
  • 继承了一个抽象基类,但没有完全实现基类里的抽象方法。
  • 实现了一个接口,但没有完全实现接口里的方法。

3、抽象类不能被实例化:无法使用 new 关键字来调用抽象类的构造器实例化抽象类;即使抽象类里不含抽象方法,这个抽象类也不能实例化。

4、抽象类只能被继承;抽象方法必须由子类提供实现(重写)。

5、final 和 abstract 永远不能同时使用:final 修饰的类不能被继承,final 修饰的方法不能被重写。

6、abstract 不能修饰变量、构造器:即没有抽象变量、抽象构造器。

7、static 和 abstract 不能同时修饰方法,但可以同时修饰内部类

8、private 和 abstract 不能同时修饰方法,但可以同时修饰内部类:abstract 关键字修饰的方法必须被其子类重写才有意义,否则这个方法永远不会有方法体,因此 abstract 方法不能定义为 private 访问权限。

9、抽象类里可以包含的:

  • 成员变量(实例变量、类变量)
  • 方法(抽象方法、实例方法、类方法)
  • 构造器:不能用于创建自己的实例,主要用于被其子类调用,初始化父类成员使用的
  • 代码块(类代码块、实例代码块)
  • 内部类(接口、枚举)
// 抽象类
public abstract class AbstractClass {// 实例变量private int age;// 类变量private static String name;// 实例代码块{}// 类代码块static {}// 抽象方法public abstract void abstractMethod();// 实例方法public void defaultMethod() {}// 类方法public static void a() {}// 构造器public AbstractClass() {}// 接口Comparable anInterface;// 枚举Enum anEnum;// 内部类class A{ }// 静态内部类static class B{}
}

抽象类的得与失:

得:可以包含抽象方法

失:无法创建实例

2、抽象类的作用

抽象类不能创建实例,只能当成父类来被继承。

从语义的角度来看,抽象类是从多个具体类中抽象出来的父类,它是更高层次的抽象。

从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计的随意性。

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。

抽象类里提供多个子类的通用方法,并把方法推迟留到子类中来实现,这就是一种模板模式。

相关文章:

Java 抽象类

文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时,常常会为该类定义一些方法,用于描述该类的行为方式,这些方法都有具体的方法体。但在某些情况下,某个基类只是知道其子类应该包含那些方法,但不知道子类是如…...

OpenPPL PPQ量化(5):执行引擎 源码剖析

目录 PPQ Graph Executor(PPQ 执行引擎) PPQ Backend Functions(PPQ 算子库) PPQ Executor(PPQ 执行引擎) Quantize Delegate (量化代理函数) Usage (用法示例) Hook (执行钩子函数) 前面四篇博客其实就讲了下面两行代码: ppq_ir load_onnx_graph(onnx_impor…...

【脚本开发】运维人员必备技能图谱

脚本(Script)语言是一种动态的、解释性的语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本语言具有小巧便捷、快速开发的特点;常见的脚本语言有Windows批处理脚本bat、Linux脚本语言shell以及python、…...

N字形变换-力扣6-java

一、题目描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读…...

概论_第5章_中心极限定理1__定理2(棣莫弗-拉普拉斯中心极限定理)

在概率论中, 把有关论证随机变量和的极限分布为正态分布的一类定理称为中心极限定理称为中心极限定理称为中心极限定理。 本文介绍独立同分布序列的中心极限定理。 一 独立同分布序列的中心极限定理 定理1 设X1,X2,...Xn,...X_1, X_2, ...X_n,...X1​,X2​,...Xn…...

详细解读503服务不可用的错误以及如何解决503服务不可用

文章目录1. 问题引言2. 什么是503服务不可用错误3 尝试解决问题3.1 重新加载页面3.2 检查该站点是否为其他人关闭3.3 重新启动设备3.3 联系网站4. 其他解决问的方法1. 问题引言 你以前遇到过错误503吗? 例如,您可能会收到消息,如503服务不可…...

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…...

数据库(三):多版本并发控制MVCC,行锁的衍生版本,记录锁,间隙锁, Next-Key锁(邻键锁)

文章目录前言一、MVCC以及MVCC的缺点1.1 MVCC可以为数据库解决什么问题1.2 MVCC的基本思想1.3 版本号1.4 Undo日志1.5 ReadView1.6 快照读和当前读1.6.1 快照读1.6.2 当前读二、记录锁三、间隙锁四、邻键锁总结前言 一、MVCC以及MVCC的缺点 MVCC,即多版本并发控制…...

c# 自定义隐式转换与运算符重载

用户定义的显式和隐式转换运算符 参考代码 用户定义的显式和隐式转换运算符 - 提供对不同类型的转换 | Microsoft Learn 代码例程 using System;public readonly struct Digit {private readonly byte digit;public Digit(byte digit){if (digit > 9){throw new Argumen…...

【MyBatis】| MyBatis的逆向⼯程

目录 一:MyBatis的逆向⼯程 1. 逆向⼯程配置与⽣成 2. 测试生成的逆向⼯程 一:MyBatis的逆向⼯程 (1)所谓的逆向⼯程是:根据数据库表逆向⽣成Java的pojo类,SqlMapper.xml⽂件,以及Mapper接⼝…...

Python|每日一练|哈希表|罗马数字|图算法|圆周率|单选记录:给定数列和|罗马数字转整数|计算圆周率

1、要求编写函数fn(a,n) 求aaaaaa⋯aa⋯aa(n个a)之和,fn须返回的是数列和(算法初阶) 要求编写函数fn(a,n) 求aaaaaa⋯aa⋯aa(n个a)之和,fn须返回的是数列和。 从控制台输入正整数a和n的值(两…...

分布式之分布式事务V2

写在前面 本文一起来看下分布式环境下的事务问题,即我们经常听到的分布式事务问题。想要解决分布式事务问题,需要使用到分布式事务相关的协议,主要有2PC即两阶段提交协议,TCC(try-confirm-cancel)&#xf…...

算法笔记(二)—— 认识N(logN)的排序算法

递归行为的时间复杂度估算 整个递归过程是一棵多叉树,递归过程相当于利用栈做了一次后序遍历。 对于master公式,T(N)表明母问题的规模为N,T(N/b)表明每次子问题的规模,a为调用次数,加号后面表明,除去调用之…...

最长湍流子数组——滚动窗口,双指针,暴力求解

978. 最长湍流子数组难度中等216收藏分享切换为英文接收动态反馈给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。更正式地来说,当 arr 的子数组 A[i]…...

45.在ROS中实现global planner(1)

前文move_base介绍(4)简单介绍move_base的全局路径规划配置,接下来我们自己实现一个全局的路径规划 1. move_base规划配置 ROS1的move_base可以配置选取不同的global planner和local planner, 默认move_base.cpp#L70中可以看到是…...

Java中导入、导出Excel——HSSFWorkbook 使用

一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要…...

c#数据结构-列表

列表 数组可以管理大量数组,但缺点是无法更变容量。 创建小了不够用,创建大了浪费空间。 无法预测需要多少大小的时候,可能范围越大,就会浪费越多的空间。 所以,你可能会想要一种可以扩容的东西,代替数组…...

Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

文章目录1. Sa-Token 介绍2. 登录认证2.1 登录与注销2.2 会话查询2.3 Token 查询3. 权限认证3.1 获取当前账号权限码集合3.2 权限校验3.3 角色校验4. 前后台分离(无Cookie模式)5. Sa-Token 集成 Redis6. SpringBoot 集成 Sa-Token6.1 创建项目6.2 添加依…...

leaflet显示高程

很多地图软件都能随鼠标移动动态显示高程。这里介绍一种方法,我所得出的。1 下载高程数据一般有12.5m数据下载,可惜精度根本不够,比如mapbox的免费在线的,或者91卫图提供百度网盘打包下载的,没法用,差距太大…...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(三级)答案解析

目录 一、单选题(共25题,共50分) 二、判断题(共10题,共20分) 三、编程题(共3题,共30分) 青少年软件编程(图形化)等级考试试卷(三级) 一、单选题(共25题,共50分) 1. 默认小猫角色…...

【操作系统】第三章 内存管理(一)

第三章 内存管理 3.1 内存管理概念 3.1.1 内存管理的基本原理和要求 内存管理的主要功能: 内存空间的分配与回收。[连续分配管理方式](#3.1.2 连续分配管理方式)和非连续分配管理方式(分页、分段)地址转换:实现逻辑地址到物理…...

Go Mutex 与 RWMutex 性能对比

在Go语言并发编程中,Mutex(互斥锁)和RWMutex(读写锁)是两种常用的同步机制。它们的性能差异直接影响高并发场景下的程序效率。本文将从多个角度对比两者的性能表现,帮助开发者根据实际需求选择合适的锁机制…...

医疗文本处理实战:用jieba分词器搞定妇科专业术语分词(附完整词典配置)

医疗文本处理实战:用jieba分词器精准解析妇科专业术语 在医疗信息化和自然语言处理领域,专业术语的准确识别一直是技术难点。特别是妇科临床文本中,"妇科凝胶"、"宫颈刮片"等复合型专业词汇的切割问题,直接影…...

3步打造专属游戏体验:面向MOD爱好者的整合包使用指南

3步打造专属游戏体验:面向MOD爱好者的整合包使用指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 你是否曾因MOD安装流程复杂而放弃尝试?面对众多版本选择时是否感到无从下…...

借助aibye智能工具高效完善毕业论文任务书范文,整合7大优质平台的AI修改功能提升学术写作质量

工具名称 核心功能 生成速度 适用场景 独特优势 aibiye 论文初稿生成 20-30分钟 全学科通用 自动插入图表公式 aicheck 初稿查重 20-30分钟 急需查重场景 独创降AIGC算法 askpaper 初稿生成 20-30分钟 理工科专业 支持代码片段 秒篇 快速生成 10-15分钟 …...

VR视频转换终极指南:让3D内容在普通设备上轻松播放

VR视频转换终极指南:让3D内容在普通设备上轻松播放 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirro…...

缺失的第一个正数(力扣100)

最朴素的想法就是从1开始查找,看看谁不在,时间复杂度为On但是需要把原数组变成集合,空间复杂度为On不符合题目的常数级空间开销我们要找的是“第一个缺失的正数”。如果数组长度是 $N$,那么这个答案一定落在 [1, N1] 这个区间里。…...

深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践

深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践 Apache incubator-pagespeed-ngx是一个强大的Nginx性能优化模块,能够自动优化网站资源,显著提升页面加载速度。无论你是网站管理员还是开发人员,掌握其配置参数…...

如何使用Compiler Explorer实时编译原理:揭秘代码到汇编的转换过程

如何使用Compiler Explorer实时编译原理:揭秘代码到汇编的转换过程 【免费下载链接】compiler-explorer Run compilers interactively from your web browser and interact with the assembly 项目地址: https://gitcode.com/gh_mirrors/co/compiler-explorer …...

如何快速部署Uvicorn ASGI服务器到AWS Lightsail:终极云服务器配置指南 [特殊字符]

如何快速部署Uvicorn ASGI服务器到AWS Lightsail:终极云服务器配置指南 🚀 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn是一个轻量级、高性能的A…...