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

说明
1.矩形,三角形,圆形都是图形,因此和Shape类的惯性应该是继承关系
2.虽然图形图Shape中也存在draw方法,但由于Shape类并不是具体的图形,因此其内部的draw方法实际是没有办法实现的
3,由于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.抽象类不能直接作为实例化对象
Shape shape = new Shape();//编译出错
Error:Shape是抽象的,无法实例化
2.抽象方法不能是private的
abstract class Shape {abstract private void draw();
}//编译出错
Error:非法的修饰组合:abstract和private
3.抽象方法不能被final和static修饰,因为抽象方法要被子类重写
public abstract class Shape {abstract final void methodA();abstract public static void methodB();
}//编译报错:
Error:非法的修饰符组合:abstract和final
Error:非法的修饰符组合:abstract和static
4.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,必须要使用abstract修饰
//矩形类
class Rect extends Shape {private double length;private double width;Rect(double length, double width) {this.length = length;this.width = width;}@Overridepublic void draw() {System.out.println("矩形:length=" + length + " width=" + width);}@Overridepublic void calcArea() {area = width * length;}
}//圆类
class Circle extends Shape {private double r;final private static double PI = 3.14;public Circle(double r) {this.r = r;}@Overridepublic void draw() {System.out.println("圆:r = " + r);}@Overridevoid calcArea() {area = PI * r * r;}
}//三角形类:
abstract class Triangle extends Shape {private double a;private double b;private double c;@Overridepublic void draw() {System.out.println("三角形:a = " + a + "b = " + b + "c = " + c);}//三角形:直角三角形,等腰三角形等,还可以继续细化//@Override//double calcArea();//编译失败:要么实现该抽象方法,要么将三角形设计为抽象类
}
5.抽象类中不一定包含抽象方法,但有抽象方法的类一定是抽象类
6.抽象类中可以有构造方法,供子类创建对象时,初始化父类成员变量
抽象类的作用
抽象类本身不能被实例化,要想使用,只能创建该抽象方法的子类,然后让子类重写父类中的抽象方法。
有些老铁可能会问:普通的类也可以被继承啊,那么为什么不使用普通的类呢,它也可以被重写啊,为啥非要设计出抽象类和抽象方法呢?
确实,但是使用抽象类相当于多了一重编译器的校验。
使用抽象类的场景就如上面的代码,实际工作不应该由父类完成,而应该由子类完成。那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的。但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。
很多语法存在的意义都是为了“预防出错”,例如我们曾经用过的final也是类似。创建的变量用户不去修改,不就相当于常量吗?但是加上final能够在不小心误修改的时候,让编译器及时提醒我们。
充分利用编译器的校验,在实际开发中是非常有意义的。
相关文章:
Java抽象类详解
抽象类 抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如: 说…...
06-微信小程序-注册程序-场景值
06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…...
多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)
多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)。 一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。 Route::get(pages/{name}, [\App\Http\Controllers\ResourceController::class, getResourceVersion])...
视频汇聚云平台EasyCVR视频监控管理平台进行SDN转推的操作步骤
视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…...
SQL 语句继续学习之记录二
三, 聚合与排序 对表进行聚合查询,即使用聚合函数对表中的列进行合计值或者平均值等合计操作。 通常,聚合函数会对null以外的对象进行合计。但是只有count 函数例外,使用count(*) 可以查出包含null在内的全部数据行数。 使用dis…...
【Python原创设计】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭
基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 在信息科技蓬勃发展的当代,我们推出了一款基于Python Flask的全国上海气象数…...
Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)
文章目录 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四)服务端客户端 Unity进阶–通过PhotonServer实现人物选择和多人同步–PhotonServer(四) 服务端 服务端结构如下: UserModel using System; using System.Collections.Generic; usin…...
【Go 基础篇】Go语言获取用户终端输入:实现交互式程序的关键一步
介绍 在许多编程场景中,我们需要编写交互式程序,以便用户可以在终端中输入数据并与程序进行交互。Go语言提供了丰富的方式来获取用户终端输入,使得编写交互式程序变得简单而有趣。本篇博客将深入探讨Go语言中获取用户终端输入的各种方法&…...
学习笔记:Opencv实现拉普拉斯图像锐化算法
2023.8.19 为了在暑假内实现深度学习的进阶学习,Copy大神的代码,记录学习日常 图像锐化的百科: 图像锐化算法-sharpen_lemonHe_的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-contrib-python Code and lena.png…...
如何在前端实现WebSocket发送和接收UDP消息(多线程模式)
目录 简介:步骤1:创建WebSocket连接步骤2:创建Web Workers步骤3:发送和接收UDP消息(多线程模式)结束语: 简介: 本文将继续介绍如何在前端应用中利用WebSocket技术发送和接收UDP消息…...
【微服务】一文了解 Nacos
一文了解 Nacos Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石项目(完成微服务拆分和业务中台建设),成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 随着云计算兴起, 2018 2018 20…...
量子计算对信息安全的影响:探讨量子计算技术对现有加密方法和信息安全基础设施可能带来的颠覆性影响,以及应对策略
第一章:引言 随着科技的迅猛发展,量子计算作为一项颠覆性的技术正逐渐走入我们的视野。量子计算以其强大的计算能力引发了全球科技界的广泛关注。然而,正如硬币的两面,量子计算技术所带来的不仅仅是计算能力的巨大飞跃࿰…...
ajax-axios-url-form-serialize 插件
AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数…...
【AIGC】单图换脸离线版软件包及使用方法
云端再好,都不如放自己手里啊,想怎么就怎么玩。云端再好,都不如放自己手里啊,想怎么就怎么玩。 Roop作为一个新出的开源项目,配置起来还是有一定难度的。 我已经把各种依赖,模型,环境配置已经…...
8.19论文阅读
文章目录 Graph-Segmenter: Graph Transformer with Boundary-aware Attention for Semantic Segmentation方法 SCSC: Spatial Cross-scale Convolution Module to Strengthen both CNNs and Transformers方法 Deformable Mixer Transformer with Gating for Multi-Task Learni…...
HAProxy
目录 HAProxy HAProxy介绍 主要特性 LVS、nginx、HAProxy区别 nginx LVS HAProxy 负载均衡策略 Haproxy搭建 Web 群集 Haproxy服务器 编译安装 Haproxy Haproxy服务器配置 添加haproxy 系统服务 节点服务器部署 日志定义 HAProxy HAProxy介绍 HAProxy是可提供高…...
基于EasyExcel的Excel读取
1.引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version> </dependency>2.读取器代码: package com.vz.utils.excel;import com.alibaba.excel.Eas…...
链路聚合详解
链路聚合详解 华为交换机链路聚合:Linux链路聚合bond配置 华为交换机链路聚合: 方式一:配置手工负载分担方式的链路聚合 [CORE1] interface Eth-Trunk 1 [CORE1-Eth-Trunk1] trunkport GigabitEthernet 0/0/5 to 0/0/6 [CORE1-Eth-Trunk1] p…...
Shell编程学习之if分支语句的应用
Shell编程中的if分支语句:伪代码表示:注意符号和表达式之间的空格; if [ 表达式1 ] then分支1 elif [ 表达式2 ] then分支2 elif [ 表达式3 ] then分支3 else其它 fi按整型的方式,if分支语句比较字符串的大小:等于&am…...
2023.8 - java - 泛型
泛型问题的引出: jdk 1.5 引出泛型 // package 泛型; public class index {public static void main (String[] args){test t new test();t.setContent("aaa");int a (int) t.getContent();System.out.println(a);} }class test{Object content;publi…...
苍穹外卖开发日记-员工管理与AOP自动填充
苍穹外卖开发日记:员工管理、分类管理与AOP自动填充实战今天完成了苍穹外卖项目的员工管理模块、分类管理模块,并通过自定义注解AOP的方式实现了公共字段的自动填充,让我们来回顾一下这些核心功能的实现。一、今日工作概览时间完成内容14:44新…...
三步搞定:iPaaS系统集成自动化配置实战
2025年,全球集成平台即服务(iPaaS)市场规模达到156.3亿美元,预计到2034年将增长至1087.6亿美元,年复合增长率高达24.20%。(数据来源:Fortune Business Insights,2026年2月࿰…...
NomNom终极指南:3个技巧让你轻松掌控《无人深空》存档
NomNom终极指南:3个技巧让你轻松掌控《无人深空》存档 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item indi…...
DavyBot开源框架:构建智能对话机器人的模块化实践指南
1. 项目概述:一个开箱即用的智能对话机器人框架最近在折腾聊天机器人项目,发现了一个挺有意思的开源项目,叫geluzhiwei1/davybot。乍一看这个名字,可能觉得有点陌生,但如果你在GitHub上搜索过聊天机器人、智能客服或者…...
基于LLM与RAG的法律AI工具:从架构解析到工程实践
1. 项目概述:一个法律文本智能生成与分析的AI工具最近在和一些做法律科技的朋友聊天时,他们反复提到一个痛点:处理海量的、格式固定的法律文书,比如起诉状、合同、律师函,既耗时又容易在细节上出错。人工起草一份严谨的…...
别再死记硬背了!用MIDI键盘和DAW软件(如FL Studio/Cubase)5分钟搞懂钢琴音区划分
别再死记硬背了!用MIDI键盘和DAW软件5分钟搞懂钢琴音区划分 第一次打开DAW的钢琴卷帘窗时,那些密密麻麻的C3、C4编号是否让你一头雾水?作为从乐队吉他手转型音乐制作的过来人,我完全理解这种困惑。传统教材里"小字组"&q…...
从怀疑到信服:VR如何从娱乐玩具进化为现实增强工具
1. 从怀疑到信服:一个技术怀疑论者的VR认知重塑之旅我不是那种会第一时间冲进苹果店排队买最新款手机的人,甚至可以说,我对新科技抱有一种近乎“卢德主义”的警惕。每当有新的技术浪潮涌来,我的第一反应不是兴奋,而是审…...
告别月薪四千,2026网工转网安:学习路线、岗位方向与避坑全指南
告别月薪四千,2026 网工转网安:学习路线、岗位方向与避坑全指南 相信很多在做网络运维的朋友,搞了几年基础工作后,都会遇到这样的瓶颈:日常主要和交换机、路由器打交道,处理配置、排障这些重复内容&#x…...
别再Ctrl+F GitHub了!Perplexity高级提示词工程(含18个已验证模板),让开源检索进入“所想即所得”时代
更多请点击: https://intelliparadigm.com 第一章:Perplexity GitHub资源检索的范式革命 从关键词匹配到语义理解的跃迁 传统 GitHub 搜索依赖精确的仓库名、文件路径或正则表达式,而 Perplexity 引入的 LLM 驱动检索将自然语言查询&#x…...
DoL-Lyra游戏增强工具新手入门
DoL-Lyra游戏增强工具新手入门 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DoL-Lyra游戏增强工具是一款专为Degrees of Lewdity游戏设计的完整整合方案,集成了最新汉化补丁、视觉增强…...
