JavaSE语法之十:抽象类(超全!!!)

文章目录

    • 一、抽象类的概念
    • 二、抽象类的语法
    • 三、抽象类的特征
    • 四、抽象类的作用

一、抽象类的概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的。
如果一个类没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
如:
在这里插入图片描述
说明:
① 矩形、三角形、圆形都是图形,因此和Shape类的惯性应该是继承关系;
② 虽然图形类Shape中也存在draw的方法,但由于Shape类并不是具体的图形,因此其内部的draw方法实际是没有办法实现的;
③ 由于Shape类没有办法描述一个具体的图形,导致其draw()方法无法具体实现,因此可以将Shape类设计为“抽象类”。

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

二、抽象类的语法

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

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

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

三、抽象类的特征

  1. 抽象类不能直接实例化对象;
abstract class Shape {
    //普通方法
    public void draw() {
    }
    //抽象方法,可以不写具体的实现
    public abstract void func();
}
public class Test2 {
    public static void main(String[] args) {
        Shape shape = new Shape(); //报错了
    }
}

// 编译出错
Error:(30, 23) java: Shape是抽象的; 无法实例化
  1. 抽象方法是不能private的;
  2. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写,所以一定要满足重写的规则;
  3. 抽象类必须被继承,并且继承后的子类要重写父类中的抽象方法,否则子类也是抽象类,必须用abstract修饰;
  4. 抽象类中不一定包抽象方法,但是有抽象方法的类一定是抽象类;
  5. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。

【抽象类和普通类的区别】
① 抽象类不能实例化;普通类可以。
② 抽象类中,可以包含非抽象方法和抽象方法;普通类只能包含非抽象方法。

四、抽象类的作用

  1. 抽象类存在的最大意义就是为了被继承,当一个普通类继承抽象方法时,这个子类必须重写抽象方法。

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

  3. 很多语法出现的意义就是为了防止出错! 抽象类也相当于多了一重编译器的校验。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman接口测试(附教程)

前言 之前还没实际做过接口测试的时候呢,对接口测试这个概念比较渺茫,只能靠百度,查看各种接口实例,然后在工作中也没用上,现在呢是各种各样的接口都丢过来…

1. pytorch mnist 手写数字识别

文章目录 一、数据集介绍1.1、简介1.2 详细介绍1、数据量2、标注量3. 标注类别4.数据下载5.数据集解读 二、读取、加载数据集1、pytorch 自带库函数2、通过重构Dataset类读取特定的MNIST数据或者制作自己的MNIST数据集 三、模型构建四、 runtraintest评估模型的性能检查点的持续…

vue 导出 HTML 结构为 Word 文档(.docx)-支持表格、css样式、图片

在 Web 开发中,有时我们希望用户能够将网页上的 HTML 内容保存为 Word 文档,以便更方便地分享和打印。本文将介绍如何使用 html-docx-js 和 file-saver 这两个 JavaScript 库,实现将 HTML 结构导出为 Word 文档的功能。 工具简介 1. html-d…

智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鱼鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

楼宇对讲门铃的芯片选型分析

目前很多的高层住宅都使用了对讲门铃了,在频繁使用中,门铃会出现的越来越多种类,下面我就简单的介绍会有用到的几款芯片. 语音通话芯片:D34018,D34118,D5020,D31101; D34018 单片电话机通话电路,合并了必 需的放大器…

Android原生实现单选

六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义: 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例: 实现方法:双向循环链表来实…

7.7、kali linux环境下搭建DVWA

目录 一、资料下载准备工作 1.1、DVWA源代码下载 二、开启Apache、mysql服务 2.1、下载Apache2文件 2.2、开启Apache2服务 方法一:开启Apache2服务(手动) 方法二:开启Apache2服务(系统自启动) 2.3、…

基于springboot超市进销存系统

**🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅**摘要 随着信息化时代的到来&…

【数字孪生】数字工厂三维可视化大屏,智慧养殖三维可视化大屏,智慧农田三维可视化大屏,智慧运维三维可视化大屏,三维在线展示

个人主页: 左本Web3D,更多案例预览请点击》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。喜欢的话请三连,有问题请私信或者加微…

通过MobaXterm远程连接Anolis

目录 前言: 一.设置ip 二.远程连接 前言: 小编已经阐述了如何安装Anolis系统,如果有不了解的小伙伴可以查看这一篇博客Anolis安装 这篇博客将会讲述如何远程连接Anolis系统。各位看官拿好板凳! 一.设置ip 打开网卡所在位…

logstash收集华为、H3C、Cisco交换机日志

网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者,我们都希望能够高效地开发应用程序,而编译速度是影响开发效率的重要因素之一。然而,有时候我们会发现在使用 Xcode 进行开发时,译速度非常慢,这给我们带来了不少困扰。那么,为什么 Xcode 的…

用Ai制作一个镭射图标

下面来展示画一个镭射图标 1、首先画一个星型形状,然后去除描边,并施加渐变中的色谱 注意按住ctrl键拖动角点就可以改变尖角为圆角 按住ctrl键单击某一个角可得到某个角的圆角 选择渐变格式 径向渐变编辑渐变 把每个渐变颜色的饱和度S减半,…

Qt 中使用 MySQL 数据库保姆级教程(上)

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 在 Qt 中默认只搭载了 QSqlLite 数据库驱动,若要使用其他数据库需要自己下载数据库,并将数据库驱动加载到…

MySql 中的聚簇索引、非聚簇索引、唯一索引和联合索引

目录 一. 前言 二. 聚簇索引和非聚簇索引 三. 覆盖索引 四. 联合索引 4.1. 原理讲解 4.2. 最左前缀匹配原则 4.3. 索引下推 五. 唯一索引 一. 前言 索引根据底层实现可分为 B-Tree 索引和哈希索引,大部分时候我们使用的都是 B-Tree 索引,因为它良…

【MySQL】InnoDB和MyISAM区别

文章目录 一、索引不同1 InnoDB聚簇索引,MyISAM非聚簇索引1 InnoDB聚簇索引2 MyISAM非聚簇索引 2 InnoDB必须要有主键,MyISAM允许没有主键3 InnoDB支持外键4 InnoDB不支持全文索引5 索引保存位置不同 二、对事物的支持三、存储结构不同四、存储空间不同五…

中国林业和草原统计年鉴数据,2001-2019年,可看示例数据

基本信息 数据名称: 中国林业和草原统计年鉴 数据格式: 其他 数据时间: 2001-2019年 数据坐标系: WGS84 数据来源:网络公开数据 原名为《中国林业统计年鉴》2020年后更名为《中国林业和草原统计年鉴》;数据中可能包含Excel表格、PDF文档之中的一…

Socks5代理IP在跨境电商与游戏中的应用

随着互联网的迅猛发展,网络已经成为人们日常生活不可或缺的一部分。在这个数字化时代,跨境电商和网络游戏产业蓬勃发展,但伴随而来的是网络安全的威胁与挑战。本文将介绍Socks5代理IP技术,探讨它在网络安全、跨境电商以及游戏中的…

【Linux学习笔记】Linux下nginx环境搭建

1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一:service nginx…
最新文章