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

Java抽象类:为何它是你代码架构的基石?

目录

1、抽象类的概念

2、抽象类语法

3、抽象类特性

4、抽象类的作用 

5、 完结散花


                                                                                个人主页:秋风起,再归来~

                                                                                文章专栏:javaSE的修炼之路                                

                                                                        个人格言:悟已往之不谏,知来者犹可追

                                                                                        克心守己,律己则安!

1、抽象类的概念

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

 在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract method), 包含抽象方法的类我们称为 抽象类(abstract class).

2、抽象类语法

在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Shape {// 抽象方法:被abstract修饰的方法,没有方法体abstract public void draw();abstract void calcArea();// 抽象类也是类,也可以增加普通方法和属性public double getArea(){return area;}protected double area;    // 面积
}

注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法

3、抽象类特性

1. 抽象类不能直接实例化对象

abstract class shape {abstract public void draw();
}public class Main {public static void main(String[] args) {shape s=new shape();//编译报错}
}

2. 抽象方法不能是 private 的

abstract class shape {abstract private void draw();//编译报错
}public class Main {public static void main(String[] args) {shape s=new shape();//编译报错}
}

3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写

abstract class shape {abstract static public void methodA();//编译报错abstract final public void methodB();//编译报错}public class Main {public static void main(String[] args) {shape s=new shape();//编译报错}
}

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修 饰

当子类不为抽象类时,没有对父类中的抽象方法进行重写就会报错!

abstract class Shape {abstract  public void draw();//抽象方法
}class  Rect extends Shape{}public class Main {public static void main(String[] args) {}
}

 重写后就不会报错!

abstract class Shape {abstract  public void draw();//抽象方法
}
abstract class  Rect extends Shape{}public class Main {public static void main(String[] args) {}
}

当子类也被abstract修饰时,就算不重写也 不会报错!

 

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

4、抽象类的作用 

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.

普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法 呢?

确实如此. 但是使用抽象类相当于多了一重编译器的校验.

使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类 了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.

很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不 就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们. 充分利用编译器的校验, 在实际开发中是非常有意义的.

5、 完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

相关文章:

Java抽象类:为何它是你代码架构的基石?

目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…...

Flutter 中的 ToggleButtons 小部件:全面指南

Flutter 中的 ToggleButtons 小部件:全面指南 在 Flutter 中,ToggleButtons 是一种允许用户在一组选项中进行切换选择的控件。它通常用于展示一组相关选项,让用户可以快速切换选择。ToggleButtons 是一种水平排列的按钮集合,其中…...

【MYSQL】一颗B+树可以保存多少条数据

引言 事万物都有自己的单元体系,若干个小单体组成一个个大的个体。就像拼乐高一样,可以自由组合。所以说,如果能熟悉最小单元,就意味着我们抓住了事物的本事,再复杂的问题也会迎刃而解。 存储单元 存储器范围比较大…...

ssm125四六级报名与成绩查询系统+jsp

四六级报名与成绩查询系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混乱&am…...

【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动

1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面,用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …...

内容安全(DPI和DFI解析)

内容安全前言: 防火墙的本质其实就是包过滤,我们通常所说的安全设备(如:IPS、IDS、AV、WAF)的检测重心是应用层。下一代防火墙基于传统防火墙的拓展能力,就是可以将以上的安全设备模块集成在一起&#xff0…...

2024数维杯数学建模A题B题C题思路+模型+代码(开赛后第一时间更新)

2024数维杯数学建模A题B题C题思路模型代码(开赛后第一时间更新) https://mbd.pub/o/bread/ZpWakpdq https://mbd.pub/o/bread/ZpWakpdq 2024年第九届数维杯大学生数学建模挑战赛参赛规则 竞赛要求及论文提交方式; ①本次参赛作品统一在线提交到竞赛…...

SpringSecurity多表,多端账户登录

本文章对应视频SpringSecurity6多端账号登录,可无限扩展教程,记得三连哦,这对我很重要呢! 温馨提示:视频与文章相辅相成,结合学习效果更强哦!更多视频教程可移步B站【石添的编程哲学】 SpringSe…...

绝地求生PUBG新老艾伦格有什么差别 老艾伦格什么时候回归

复古风格的艾伦格原始地图携带着那些标志性的记忆符号华丽回归,邀请您沉浸于往昔的每一处细节探索中。我们不仅还原了游戏诞生的起点,还在其中巧妙融入现代游戏元素,构筑一座连接昔日与今朝的桥梁,完美融合了经典与创新的游戏体验…...

Windows下安装Node.js、npm和electronic,并运行一个Hello, World!脚本程序

20240510 By wdhuag 目录 简介: 参考: 安装Node.js 安装npm 配置npm: 修改包存放目录和缓存目录 切换镜像源 使用 nrm 切换镜像源 安装Electron 运行一个Hello, World!脚本程序 安装Yarn JavaScript 指南 简介: Nod…...

【精品案例】化工炼化企业信息化建设解决方案(74页PPT)

一、资料介绍 化工炼化企业信息化建设解决方案是一份详尽且全面的指导文件,旨在助力化工炼化企业实现信息化、智能化和数字化转型。本资料以74页的PPT形式呈现,围绕智能化工程施工方案、化工炼化企业信息化以及化工行业数字化转型等关键词,为…...

【Unity Animation 2D】Unity Animation 2D骨骼绑定与动画制作

一、图片格式为png格式,并且角色各部分分离 图片参数设置 需要将Sprite Mode设置为Single,否则图片不能作为一个整体 1、创建骨骼 1.1 旋转Create Bone,点击鼠标左键确定骨骼位置,移动鼠标再次点击鼠标左键确定骨骼&#xff0c…...

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…...

UE4_照亮环境_光束light beam

学习笔记,不喜勿喷,侵权立删!祝愿生活越来越好! 光束:模拟大气中散射的光线。利用定向光源模拟真实曙暮光效果或大气散射的阴影,即可生成 光束 。这些光线为场景添加深度和真实度。 一:一些参数…...

springboot3项目练习详细步骤(第三部分:文章管理模块)

目录 发布文章 接口文档 业务实现 自定义参数校验 项目参数要求 实现思路 实现步骤 文章列表(条件分页) 接口文档 业务实现 mapper映射 更新文章 接口文档 业务实现 获取文章详情 接口文档 业务实现 删除文章 接口文档 业务实现 文章管理业务表结构…...

【面试八股总结】C++11新特性:智能指针

参考资料 :阿秀、代码随想录 智能指针是一个类,用于存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄露。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自…...

【教程向】从零开始创建浏览器插件(二)深入理解 Chrome 扩展的 manifest.json 配置文件

第二步:深入理解 Chrome 扩展的 manifest.json 配置文件 上一次我们已经着手完成了一个自己的浏览器插件,链接在这里:我是链接 在本篇博客中,我们将更详细地探讨 Chrome 扩展中的 manifest.json 文件。这个文件是每个浏览器扩展…...

美易官方:美国房地产贷款逾期率飙升,银行业危机仍可控?现货黄金暂守2360

美国房地产贷款逾期率飙升,银行业危机仍可控?现货黄金暂守2360 近年来,美国房地产市场一直处于波动之中,尤其是商业房地产领域。近期,美联储发出警告,称商业房地产贷款逾期率持续攀升,银行正在为…...

SwiftUI中的@StateObject和@ObservedObject的区别

SwiftUI中的StateObject和ObservedObject属性包装器指示视图更新以响应被观察对象的变化。虽然这两个属性包装器看起来很相似,但在使用SwiftUI构建应用程序时,有一个关键的区别需要理解。 两个属性包装器都要求对象符合ObservableObject协议。这个协议表…...

类与对象(二)

封装 封装作为面向对象三大特性(封装,继承,多态)之一,那如何实现封装性的呢?就又得拿出上面的访问修饰限定符的图 public: 就是在任何地方都可以访问 protected: 涉及子类在介绍继承时详细介绍 default: …...

暗黑3效率提升与智能辅助:D3keyHelper自动化工具全攻略

暗黑3效率提升与智能辅助:D3keyHelper自动化工具全攻略 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在《暗黑破坏神3》的冒险旅程中&a…...

用Arduino UNO R3和MPU6050搞定平衡小车:从硬件接线到PID参数调试全记录

从零打造Arduino平衡小车:硬件搭建与PID调参实战指南 1. 项目准备与硬件选型 平衡小车作为入门机器人的经典项目,融合了传感器技术、控制算法和机电一体化设计。在开始动手前,我们需要准备以下核心组件: 核心硬件清单:…...

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警

24小时运行OpenClaw:nanobot镜像监控网站变更并邮件报警 1. 为什么需要自动化网站监控 上周我负责的一个项目突然出了状况——客户官网的产品价格页面被意外修改,导致大量用户投诉。团队花了整整两天才发现问题根源。这件事让我意识到,对于…...

RC522 RFID模块SPI驱动开发与寄存器级控制实践

1. RC522 RFID读写模块底层技术解析与嵌入式驱动开发实践1.1 模块硬件架构与通信协议基础RC522 是 NXP(恩智浦)推出的高度集成非接触式射频识别(RFID)读写芯片,广泛应用于门禁系统、公交卡读取、物流追踪等嵌入式场景。…...

嵌入式开发常见问题与调试技巧

嵌入式开发中的常见问题与解决方案1. 开发过程中的典型挑战1.1 软件层面的常见问题在嵌入式软件开发中,bug的出现是不可避免的。开发者需要掌握系统化的调试方法:状态机编程:对于复杂的控制逻辑,采用状态机设计模式可以显著提高代…...

医生也能懂的医学图像分析指南:从X光片到AI诊断全流程解析

医生也能懂的医学图像分析指南:从X光片到AI诊断全流程解析 在门诊忙碌的间隙,王医生打开电脑调出一张胸部CT,屏幕上密密麻麻的灰白色影像中,一个直径不足5毫米的结节若隐若现。这种场景对放射科医生来说再熟悉不过——每天需要在上…...

掌握Dynamic-DataSource注解与事务传播:MANDATORY模式终极指南

掌握Dynamic-DataSource注解与事务传播:MANDATORY模式终极指南 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource …...

全面解析数据库锁机制:从行锁到死锁的深度剖析

锁是数据库并发控制的核心机制,也是面试中绕不开的高频考点。很多开发者对锁的理解停留在“加锁就行了”,但遇到死锁、锁等待超时、性能骤降等问题时往往束手无策。本文将系统讲解数据库锁的分类、实现原理、锁与事务隔离级别的关系,并结合 M…...

【国家级智慧农场落地案例】:Python图像算法如何将番茄裂果识别准确率提升至98.7%?

第一章:国家级智慧农场落地背景与番茄裂果识别挑战近年来,国家《“十四五”推进农业农村现代化规划》明确提出加快数字技术与农业生产深度融合,推动建设一批国家级智慧农场示范项目。在华北、华东等核心蔬菜产区,规模化番茄种植基…...

从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南

从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南 鸢尾花分类是机器学习入门的经典案例,但对于初学者来说,从理论推导到框架实战往往充满挑战。本文将带你完整走通这条学习路径:先手写感知机理解算法本质&#xf…...