欢迎来到我的Java世界“抽象类”

在这里插入图片描述
前言
在上篇中我们学习到了继承的概念、语法等等,那么小编将来为大家方享下一篇Java中的抽象类。

1.抽象类的概念

2.抽象类的语法

3.抽象类的特性

4.抽象类的作用

一:讲到抽象类,大家是不是会很迷惑什么是抽象类?

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。例如如图:

说明:
1.矩形、三角形、圆形都是图形,因此和Shape类的惯性应该是继承关系。
2.虽然图形图Shape中也存在draw的方法,但由于shape类并不是具体的图形,因此其内部的draw方法实际是没有办法实现的。
3.由于shape类没有办法描述一个具体的图形,导致其draw()方法无法具体实现,因此可以将shape类设计为“抽象类”。

像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方(abstractmethod), 包含抽象方法的类我们称为抽象类(abstract class).在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法。

二:那么抽象类有哪些语法呢?
Java中的抽象类是一种不能被实例化的类,它主要用于被其他类继承。抽象类通常包含抽象方法,这些方法是没有具体实现的方法,只是声明了方法的签名,让子类去实现这些方法。抽象类通过abstract关键字来声明。

abstract class ClassName {  // 成员变量  // 构造方法(可选)  // 抽象方法  abstract void methodName();  // 非抽象方法(可选)  void anotherMethodName() {  // 方法实现  }  // 抽象类中可以包含静态方法  static void staticMethodName() {  // 方法实现  }  // 抽象类中也可以包含静态代码块、初始化块等  
}

①抽象方法:在抽象类中,至少有一个方法是抽象方法。抽象方法用abstract关键字声明,并且没有方法体(即没有大括号{}包围的代码)。
②构造方法:抽象类可以有构造方法,但主要用途是供子类在构造实例时调用父类的构造方法,进行初始化操作。抽象类不能被实例化,因此不能直接调用其构造方法。
③继承:抽象类的主要用途是被其他类继承。继承抽象类的子类必须实现所有继承的抽象方法,除非子类也是抽象类。
④非抽象方法:抽象类中可以包含非抽象方法(即实现了具体逻辑的方法)。
⑤静态成员:抽象类中可以包含静态成员(静态变量、静态方法、静态代码块等),这些静态成员可以直接通过类名来访问

abstract class Animal {  String name;  Animal(String name) {  this.name = name;  }  // 抽象方法  abstract void makeSound();  // 非抽象方法  void eat() {  System.out.println(name + " is eating.");  }  
}  class Dog extends Animal {  Dog(String name) {  super(name);  }  // 实现抽象方法  @Override  void makeSound() {  System.out.println(name + " says Woof!");  }  
}  class Main {  public static void main(String[] args) {  Dog dog = new Dog("Buddy");  dog.makeSound();  dog.eat();  }  
}

Animal是一个抽象类,它有一个抽象方法makeSound()。Dog类继承了Animal类,并实现了makeSound()方法。这样,Dog类就可以被实例化了。
三:抽象类的特性
1. 不能被实例化:抽象类不能被直接实例化。也就是说,你不能使用new关键字来创建抽象类的对象。这是因为抽象类通常包含未实现的方法,这些方法需要由子类来提供具体的实现。
2. 可以包含抽象方法:抽象类可以包含抽象方法,这是没有方法体的方法,仅声明了方法的签名。抽象方法用abstract关键字标记。抽象类也可以不包含任何抽象方法,但这样的抽象类主要是用于被其他类继承,并限制该类的实例化。
3. 可以被继承:其他类(无论是抽象类还是非抽象类)都可以继承抽象类。当子类继承抽象类时,它必须实现父类中所有的抽象方法(除非子类本身也是抽象类)。
4. 可以有构造方法:尽管抽象类不能被直接实例化,但它们可以有构造方法。这些构造方法主要用于被子类在创建实例时调用,以便进行初始化操作。
5. 可以有非抽象方法和字段:抽象类不仅限于包含抽象方法,它还可以包含已经实现的方法(即非抽象方法)和字段。这些方法和字段可以被子类继承和使用。
6. 可以作为类型引用:尽管你不能直接实例化抽象类,但你可以使用抽象类作为类型引用,比如声明类的成员变量、方法的返回类型、方法的参数等。
7. 静态成员:抽象类中可以包含静态成员(静态变量、静态方法、静态代码块等)。这些静态成员属于类本身,而不是类的实例,因此它们可以通过类名直接访问,而无需创建类的实例。
8. 访问修饰符:抽象类和抽象方法都可以使用访问修饰符(如public、protected和private)来指定它们的可见性。然而,由于抽象方法需要在子类中被实现,因此它们通常被声明为public或protected,以确保子类可以访问它们。
9. 抽象类的最终用途:抽象类的最终用途是提供一个或多个抽象方法的框架,这些方法将由继承抽象类的子类来具体实现。通过这种方式,抽象类促进了代码的复用和模块化,同时强制子类实现特定的行为。
10. 抽象类与接口的区别:虽然抽象类和接口都用于定义类的规范,但它们在实现和使用上有所不同。接口是纯粹的抽象,只能包含抽象方法和常量,而抽象类可以包含已实现的方法和变量。此外,一个类只能继承一个抽象类(单继承),但可以实现多个接口(多实现)。
四:抽象类的作用
1. 定义通用行为和属性
抽象类用于定义一组相关类的共同行为和属性。通过抽象类,开发者可以将这些共同的行为和属性抽象为方法或属性,并在抽象类中进行声明或初步实现。子类继承抽象类后,可以直接使用这些通用的方法和属性,避免了重复编写相同的代码,提高了代码的重用性和可维护性。
2. 强制子类实现特定行为
抽象类中可以包含抽象方法,这些方法没有具体的实现,只有方法的声明。子类继承抽象类后,必须实现所有继承的抽象方法,否则子类也必须被声明为抽象类。这种机制强制子类实现特定的行为,确保了子类具有某些必要的功能。
3. 作为类型隐藏和全局变量的角色
在面向对象的方法中,抽象类还可以用来进行类型隐藏和充当全局变量的角色。通过抽象类,开发者可以隐藏具体的实现细节,只对外暴露必要的接口,从而提高了系统的安全性和灵活性。
4. 提供模板方法
抽象类中可以定义模板方法,这些方法提供了算法的框架,但允许子类根据需要实现特定的步骤。模板方法在设计模式中非常常见,它提供了一种标准的方法实现,并允许子类根据实际情况进行定制,从而提高了代码的灵活性和可扩展性。
5. 支持多态性
通过将抽象类作为参数类型或返回类型,可以实现方法的参数多态和返回值多态。这样可以让程序更加灵活,能够处理不同子类对象的统一接口,提高了程序的适应性和可重用性。
6. 捕捉子类的通用特性
抽象类被用来捕捉子类的通用特性,是创建继承层级里子类的模板。它提供了一种方式,让开发者可以定义一组具有共同特征的子类,并通过抽象类来规范这些子类的行为。
7. 促进模块化设计
通过抽象类,开发者可以将系统中的不同部分划分为独立的模块,每个模块都由一个或多个抽象类来定义其接口和行为。这样,系统的结构更加清晰,各个模块之间的耦合度降低,便于开发和维护。
在这里插入图片描述

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

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

相关文章

安卓framework美化手势导航侧滑返回UI

文章目录 手势导航的侧滑返回效果图原生效果如下:要实现的功能,: 实现代码1. 初始化代码2. 修改绘制的代码,进行箭头与退出UI的显示3. 拖动的时候手指上下移动时,箭头ui跟着移动 以下是一些其他可以美化安卓右滑手势拖动 UI 的方法:视觉效果方面形状和布局方面 安卓…

加密软件有哪些数据防护功能?

1.文件透明加密:采用透明加密技术,自动对指定类型的敏感文件进行实时加密,确保数据在存储和传输过程中的安全性。 2.权限管理与访问控制:通过细粒度的权限管理,控制员工对敏感数据的访问权限,包括读取、修…

PHP一键约课高效健身智能健身管理系统小程序源码

一键约课,高效健身 —— 智能健身管理系统让健康触手可及 🏋️‍♀️ 告别繁琐,一键开启健身之旅 你还在为每次去健身房前的繁琐预约流程而烦恼吗?现在有了“一键约课高效健身智能健身管理系统”,所有问题都迎刃而解…

Solana核心漏洞技术详解

8月9日,Solana团队齐心协力解决了一个严重的安全漏洞。这次秘密修复详情可以在GitHub上查询到。CertiK团队对这一漏洞进行了深入分析。 1. Solana漏洞起因 8月9日,Solana验证者和客户端团队齐心协力解决了一个严重的安全漏洞。Solana验证者Laine表示&am…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性,它是ES11(ES2020)中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时,会短路,直接返回undefined,如果存在,那么…

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…

安卓玩机工具-----ADB方式的刷机玩机工具“秋之盒”’ 测试各项功能预览

秋之盒 安卓玩机工具-秋之盒是一款ADB刷机工具箱,基于谷歌ADB的一款绿色安装,具备了海量扩展模块,支持ADB刷机救砖、一键激活黑域、adb指令修复等功能,是一款开源、免费、易用的手机刷机工具! 并且是一款开源、免费、易用的图形化…

细致刨析JDBC ① 基础篇

目录 一、JDBC概述 1.JDBC的概念 ​编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…

P3565 [POI2014] HOT-Hotels

~~~~~ P3565 [POI2014] HOT-Hotels ~~~~~ 总题单链接 ~~~~~ 2024.9.10:DP方程有问题,已修改,同时更新了长链剖分优化版本。 思路 ~~~~~ 设 g [ u ] [ i ] g[u][i] g[u][i] 表示在 u u u 的子树内,距离 u u u 为 i i i 的点的…

管家婆云辉煌手机端怎么连接蓝牙打印机?

管家婆云辉煌手机端可以连接蓝牙打印机,这样手机可以发送打印任务到蓝牙打印机,完成打印任务。具体的设置步骤如下: 一、首先完成手机和蓝牙打印机配对,打开蓝牙打印机后。手机开启蓝牙和定位服务 点击手机设置,进入手…

jmeter压力测试,通过LLM利用RAG实现知识库问答,NEO4J部署,GraphRAG以知识图谱在查询时增强提示实现更准确的知识库问答(9/7)

前言 这周也是杂七杂八的一天(高情商:我是一块砖,哪里需要往哪里搬),首先是接触了jemter这个压力测试工具,然后帮公司的AIGC项目编写使用手册和问答手册的第一版,并通过这个平台的智能体实现知识…

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体…

探索数据可视化的奥秘:Seaborn库的魔力

文章目录 探索数据可视化的奥秘:Seaborn库的魔力背景:为何选择Seaborn?Seaborn是什么?如何安装Seaborn?简单函数介绍与示例场景应用示例常见问题与解决方案总结 探索数据可视化的奥秘:Seaborn库的魔力 背景…

xLSTM模型学习笔记

笔记来源:bilibili LSTM 回顾 原始的 LSTM 是为了解决 RNN 时序反向传播中梯度消失和爆炸问题而提出的。 其所谓的门控机制,其实就是一种时序上的注意力机制,相当于把不同时间进行"掺和",是对时序信息的一种选择性控制…

【ARM compiler】生成ELF文件中包含了那些内容

【更多软件使用问题请点击亿道电子官方网站】 文档目标:用于了解ARM compiler生成的ELF文件中存储的内容进行了解 问题场景:ELF文件主要用于通过调试软件对于代码的运行顺序和数据链接等内容进行分析。了解一下ARM compiler生成ELF文件包含那些内容。 软…

Linux find案例

目录 1. 只查找当前目录,不查找子目录中的指定文件2. 查找到的文件批量复制到指定文件夹中3. 查找到的文件批量修改所属用户和组4. 查找到的文件批量添加执行权限5. 查找到的文件内容全部导入指定文件6. 查找指定目录下指定用户所属的文件7. 获取当前目录下&#xf…

[Redis] Redis中的String类型

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

电脑开机速度慢怎么解决?

电脑开机速度慢怎么解决?电脑开机速度慢的原因可以是多方面的,以下是一些常见的原因: 启动项过多: 许多软件在系统启动时会自动启动,导致启动项过多,从而延长了开机时间。过时的驱动程序: 设备…

《基于深度半监督学习的目标检测综述》泛读

基于深度半监督学习的目标检测方法分为 1、生成式方法 2、一致性正则化方法 3、基于图的方法 4、伪标记方法和混合方法 然后基于常用数据集 对典型方法进行了性能对比,最后分析了其挑战和发展趋势,旨在为相关研究提供参考 收获就是: 1…

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-Gigabi…