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

4.2 抽象类

1. 抽象类概念

定义一个类时,常常需要定义一些成员方法用于描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,Animal类中的shout()方法用于描述动物的叫声,但是不同的动物,叫声也不相同,因此在shout()方法中无法准确描述动物的叫声。

针对上面描述的情况,Java提供了抽象方法来满足这种需求。抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。抽象方法的语法格式如下。

public abstract 返回值类型 方法名称(参数); //抽象方法,无方法体

当一个类包含了抽象方法,该类就是抽象类。抽象类和抽象方法一样,必须使用abstract关键字进行修饰。抽象类的语法格式如下。

public abstract class 抽象类名称 {public abstract 返回值类型 抽象方法名称(参数); //抽象方法,无方法体}

2. 抽象类的规则

从上面抽象类的语法格式中可以发现,抽象类的定义比普通类多了一个或多个抽象方法,其他地方与普通类的组成基本相同。抽象类的定义规则如下。

(1)包含抽象方法的类必须是抽象类。

(2)声明抽象类和抽象方法时都要使用abstract关键字修饰。

(3)抽象方法只需声明而不需要实现。

(4)如果非抽象类继承了抽象类,那么该类必须实现抽象类中的全部抽象方法。

3. 抽象类案例

  • 案例需求

定义抽象类动物类Animal,定义其抽象方法shout(),抽象方法用public修饰。

定义一个小猫类Cat,继承Animal抽象类,在Cat类中覆盖Cat类中的抽象方法shout(),输出“小猫喵喵叫”。

编写测试类,使用无参构造方法实现Cat类的实例化,访问shout()方法。

  • 抽象类Animal类

public abstract class Animal {public abstract void shout();}
  • Cat类

public class Cat extends Animal{@Overridepublic void shout() {System.out.println("小猫喵喵叫");}
}
  • 测试类

public class TestCat {@Testpublic void test(){Cat cat = new Cat();cat.shout();}}

4. 练习

定义抽象类图形类Shape,定义其抽象方法getArea(),抽象方法用public修饰。

定义一个圆形类Circle,继承Shape抽象类,在Circle类中定义一个double型的表示半径的成员变量radius,成员变量用private修饰,定义成员变量的getter和setter方法;在Circle中覆盖Shape类中的抽象方法getArea()。

编写测试类,使用无参构造方法实现Circle类的实例化,访问getArea()方法。

  • 抽象类Shape类

public abstract class Shape {public abstract double getArea();}
  • Circle类

public class Circle extends Shape{private double radius;public void setRadius(double radius) {this.radius = radius;}public double getRadius() {return radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}
}
  • 测试类

public class TestCircle {@Testpublic void test(){Circle c = new Circle();c.setRadius(2);double area = c.getArea();System.out.println("圆的面积是:" + area);}}

5. 思考

自定义抽象类,定义其抽象方法,抽象方法用public修饰。

自定义非抽象子类,继承抽象类,覆盖抽象类中的抽象方法。

编写测试类,使用无参构造方法实现非抽象子类的实例化,访问重写方法。

相关文章:

4.2 抽象类

1. 抽象类概念 定义一个类时,常常需要定义一些成员方法用于描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,Animal类中的shout()方法用于描述动物的叫声,但是不同的动物,叫声也不相同,因此…...

ITextRenderer将PDF转换为HTML详细教程

引入依赖 <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.18</version></dependency> 问题一&#xff1a;输出中文字体 下载字体simsun.ttc 下载链接&am…...

c#设计模式-行为型模式 之 备忘录模式

&#x1f680;简介 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象。所谓备忘录模式就是在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象…...

ffmpeg+安卓+yolo+RK3399部署

一次满足多项需求. 首先, 思路是, 使用ffmpeg解码本地mp4文件, 在无需任何其他改动的情况下, 就可以直接播放rtsp流, 这个是使用ffmpeg的好处. ffmpeg本身是c语言的, 所以需要编译成jni的库, https://note.youdao.com/s/6XeYftc 具体过程在这里, 用windows/macOS, Ubuntu应该都…...

发电机教程:小白必学的柴油发电机技巧

柴油发电机监控是关键的能源管理和维护工具&#xff0c;它用于确保持续的电力供应&#xff0c;提高能源效率&#xff0c;并延长发电机的寿命。 随着科技的不断发展&#xff0c;监控系统变得更加智能和高效&#xff0c;使用户能够远程监测和管理柴油发电机的运行状态。 客户案例…...

基础课1——人工智能的分类和层次

1.人工智能的分类 人工智能&#xff08;AI&#xff09;的分类主要有以下几种&#xff1a; 弱人工智能&#xff08;Artificial Narrow Intelligence&#xff0c;ANI&#xff09;&#xff1a;弱人工智能是擅长于单个方面的人工智能&#xff0c;例如战胜象棋世界冠军的人工智能阿…...

C语言复杂表达式与指针高级

一、指针数组与数组指针 1.指针数组VS数组指针 &#xff08;1&#xff09;指针数组&#xff1a;实质是一个数组&#xff0c;因为这个数组中传参的内容全部是指针变量。 &#xff08;2&#xff09;数组指针&#xff1a;实质是一个指针&#xff0c;这个指针指向一个数组 2.分析指…...

【Python从入门到进阶】39、使用Selenium自动验证滑块登录

接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能&#xff0c;首先我们来讲解如何进行滑块自动验证的操作。 一、测试用例介绍 我们要通过sel…...

利用FPGA和CPLD数字逻辑实现模数转换器

数字系统的嵌入式工程师熟悉如何通过使用FPGA和CPLD在其印刷电路板上将各种处理器&#xff0c;存储器和标准功能组件粘合在一起来实现其数字设计的“剩余”。除了这些数字功能之外&#xff0c;FPGA和CPLD还可以使用LVDS输入&#xff0c;简单的电阻电容器&#xff08;RC&#xf…...

上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指上个交易日低开后震荡调整&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;宁德时代一度跌超3%&#xff…...

间歇性微服务问题...

在Kubernetes环境中&#xff0c;最近由于特定配置导致Pod调度失败。哪种 Kubernetes 资源类型&#xff08;通常与节点约束相关&#xff09;可能导致此故障&#xff0c;尤其是在未正确定义的情况下&#xff1f; 节点选择器资源配额优先级污点Pod 中断预算 已有 201 人回答了该…...

小程序开发平台源码系统+ 带前后端完整搭建教程

大家好&#xff0c;给大家分享一个小程序开发平台源码系统。这款小程序开发平台中有很多功能&#xff0c;今天主要来给大家介绍一下洗车行业小程序制作的功能。以下是部分核心代码图&#xff1a; 系统特色功能&#xff1a; LBS定位&#xff1a;小程序能够自动显示附近的共享洗…...

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条&#xff0c;但是想要在​​.lever​​元素中单独开启滚动条的样式&#xff0c;你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例&#xff0c;展示如何给​​.lever​​单独开启…...

【计算机网络】网络原理

目录 1.网络的发展 2.协议 3.OSI七层网络模型 4.TCP/IP五层网络模型及作用 5.经典面试题 6.封装和分用 发送方(封装) 接收方(分用) 1.网络的发展 路由器&#xff1a;路由指的是最佳路径的选择。一般家用的是5个网口&#xff0c;1个WAN口4个LAN口(口&#xff1a;端口)。可…...

力扣第39题 组合总和 c++ 回溯剪枝题

题目 39. 组合总和 中等 相关标签 数组 回溯 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…...

qt软件正常运行的崩溃了定位行号方法

软件&#xff08;debug版exe或者release版exe&#xff09;在正常运行状态下&#xff08;不是gdb调试运行&#xff09;&#xff0c;如果软件崩掉&#xff0c;那么会直接闪退&#xff0c;软件什么也做不了&#xff0c;此时无法保存软件中的状态信息&#xff0c;此外&#xff0c;也…...

软件工程与计算总结(十五)详细设计中面向对象方法下的信息隐藏

软件工程与计算总结&#xff08;十三&#xff09;详细设计中的模块化与信息隐藏 之前的博客中&#xff0c;模块需要隐藏的决策主要由“职责的实现”and“实现的变更”两类&#xff0c;在面向对象方法中&#xff0c;需要做到的就是&#xff1a; 封装类的职责&#xff0c;隐藏职…...

鸿蒙初体验

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…...

hive复合类型的数据查询

hive数据表创建-CSDN博客 --第一个名字以M开头的 访问数组array 数组&#xff08; array) 引用方式 列名 [ 元素索引 _ 以 0 开始 ] select * from emp where emp_name[0] rlike "^M"; -- 出生日期是在 5 几年 访问 Map map 引用方式 列名 ["Key"] selec…...

Notes/Domino 14 Early Access Drop3发布

大家好&#xff0c;才是真的好。 其实上周&#xff0c;就是国庆假期的时候&#xff0c;HCL Notes/Domino 14 Early Access Drop3&#xff08;以下简称EA3&#xff09;就已经发布&#xff0c;而且和传说中的一样&#xff0c;带来了数项惊人的新特性。 我们先讲讲这一版本新特性…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...