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修饰。

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

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

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

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

相关文章

JMM 的设计意图

JMM 的设计意图 让我们来看JMM的设计意图。从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素。 程序员角度编译器和处理器角度程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。编译器和…

从代码入手理解卡尔曼滤波器的原理之引入状态转换模型(四)

前面讲到没有外部控制输入,也没有其他动态模型来描述温度如何随时间变化。因此,状态x的预测值就是上一个状态的值。 默认在没有新的观测数据时,室温是恒定不变的。但在实际情况中,室温可能会随时间上升或下降,比如因为暖气的开启或窗户的打开。我们可以通过引入一个状态转…

倒计时4天|超硬核!第四届CID大会完整议程揭晓

CID大会官网: http://chinacid.org/ 原文链接:报名继续 | 超硬核!第四届CID大会完整议程揭晓

TDengine 资深研发整理:基于 SpringBoot 多语言实现 API 返回消息国际化

作为一款在 Java 开发社区中广受欢迎的技术框架,SpringBoot 在开发者和企业的具体实践中应用广泛。具体来说,它是一个用于构建基于 Java 的 Web 应用程序和微服务的框架,通过简化开发流程、提供约定大于配置的原则以及集成大量常用库和组件&a…

使用Pytorch实现频谱归一化生成对抗网络(SN-GAN)

自从扩散模型发布以来,GAN的关注度和论文是越来越少了,但是它们里面的一些思路还是值得我们了解和学习。所以本文我们来使用Pytorch 来实现SN-GAN 谱归一化生成对抗网络是一种生成对抗网络,它使用谱归一化技术来稳定鉴别器的训练。谱归一化是…

YOLO目标检测——跌倒摔倒数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用:公共安全监控、智能家居、工业安全等活动区域无监管情况下的人员摔倒事故数据集说明:YOLO目标检测数据集,真实场景的高质量图片数据,数据场景丰富。使用lableimg标注软件标注,标注框质量高,含…

【Eclipse】取消按空格自动补全,以及出现没有src的解决办法

【Eclipse】设置自动提示 教程 根据上方链接,我们已经知道如何设置Eclipse的自动补全功能了,但是有时候敲变量名的时候按空格,本意是操作习惯,不需要自动补全,但是它却给我们自动补全了,这就造成了困扰&…

诚迈科技董事长王继平出席中国(太原)人工智能大会并发表演讲

10月14日—15日,2023中国(太原)人工智能大会在山西省太原市举办。诚迈科技在大会上全面展示了其在人工智能领域的一系列创新技术与解决方案,诚迈科技董事长、统信软件董事长王继平受邀出席产业数字化转型论坛并发表主题演讲&#…

面试58同城!面试官问我redis 雪崩、穿透、击穿怎么处理?

一、Redis 缓存雪崩 1.1 缓存雪崩的概念 缓存雪崩指的是在某个时间点,缓存中的大量数据同时失效,导致大量请求直接落到数据库上,造成数据库压力过大,甚至引发系统崩溃。 1.2 缓存雪崩发生的原因 缓存雪崩通常是由以下原因引起…

[已解决]llegal target for variable annotation

llegal target for variable annotation 问题 变量注释的非法目标 思路 复制时编码错误,自己敲一遍后正常运行 #** 将垂直知识加入prompt,以使其准确回答 **# prompt_templates { # "recommand":"用户说:__INPUT__ …

紫光展锐荣评“5G技术创新力企业”,5G赋能千行百业

近日,2023年第十七届中国通信产业榜隆重发布,紫光展锐凭借多年以来在通信和芯片技术上的积累,从众多参选者中脱颖而出,荣评“5G技术创新力企业”,并蝉联2023年通信产业榜“中国通信设备技术服务供应商100强”。 作为一…

5.1 加载矢量图层(ogr,gpx)

文章目录 前言加载矢量(vector)图层ogrShapefileQGis导入.shp文件代码导入 gpxQGis导入GPX文件代码导入 gpkgQGis导入GPKG文件代码导入 geojsonQGis导入GeoJson文件代码导入 gmlQGis导入GML代码导入 kml/kmzQGis导入Kml代码导入 dxf/dwgQGis导入dxf代码导入 CoverageQGis导入Co…

JMeter安装及环境配置

1. JMeter 介绍 Apache组织开发的基于Java的压力测试工具 100%纯Java开发、完全的可移植性 可以用于测试静态和动态资源 多协议—HTTP/FTP/socket/Java/数据库(JDBC) 完全多线程 高可扩展性 2. 安装jdk并配置jdk环境 因为jmeter运行依赖jdk环境,所以在安装j…

Spring Security 6.x 系列【68】 授权篇之基于注解 缓存的访问控制方案

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. 改造思路3. 实现3.1 基础工程3.2 数据库存储用户3.3 自定义3.4 测…

lvgl 页面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存,界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举,用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…

发电机组负载测试的必要性

发电机组负载测试是确保发电机组能够在实际运行中稳定工作的重要步骤,负载测试可以模拟发电机组在不同负载条件下的工作情况,评估其性能和稳定性。负载测试可以验证发电机组在不同负载条件下的性能表现,通过模拟实际使用情况评估发电机组的输…

css3自动吸附scroll-snap

我们希望可以一块一块的滚动,比如当前一个块滚出去了一部分并且后一个块滚进来一部分的时候,实现后一个块自动滚入或者前一个块回弹到初始位置这种效果,以前的时候用js需要写比较复杂的判断逻辑,后来有了一个css scroll snap这个方…

Java打印二进制

💕"把握未定,宜绝迹尘嚣,使此心不见可欲而不乱,以澄悟吾静体。"💕 作者:Mylvzi 文章主要内容:Java打印二进制 Java中打印二进制的方法有很多,这里介绍三种方式 1.利用In…

CSI2与CDPHY学习

注意:本文是基于CSI2-V3.0 spec。 其中CPHY为 V2.0 DPHY为V2.5 本文主要在packet级别介绍CSI2与对应的CDPHY,需要注意的是: CDPHY的HS burst数据和LPDT都是以packet为单位传输数据。 其中LPDT包括Escape和ALP的LPDT 1.CSI-CPHY 1.1CPH…

传输机房的基本结构

文章目录 传输机房主要结构 传输机房主要结构 ODF (Optical Distribution Frame),光纤配线架,是专为光纤通信机房设计的光纤配线设备,具有光缆固定和保护功能、光缆终接功能、调线功能,完成从设备间纤缆连…