javaSE(基础):5.抽象类和接口

抽象类

一.理解抽象类

  思维:假如我想定义一个Shape(图形类)类,我在这个类中写了一个draw()方法,但是这个方法是不能用来描述图形形状的(不能有方法体),因为我只要对他进行了准确描述,那他的形状就定死了。

  所以,如果我们想要定义一个形状如:三角形——》写一个三角形类,三角形也是图形的一种是吧,所以我们就可以继承Shape类,并一定要重写父类中的方法(如果你不重写的话不就相当与白继承了一个类吗?父类的方法中什么也没写呀),通过重写父类方法获得一个你心目中的“三角形”。这个Shape类就是抽象类,他的使用方法也是如此。

二.抽象类的语法

  在Java中,一个类如果被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,该方法不能有方法体,是必须要被子类重写的,否则会报错;

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

三.抽象类的特性

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

只可以像普通父类一样引用子类new的对象。

 2. 抽象方法不能是 private

就是说,abstract和private不能同时出现。

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

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

   4.1如:
  4.2若Main类也使用abstract修饰,那么后面有类继承了Main类的话要么还是使用abstract修饰,要么就重写Abstract和Mian这两个类的抽象方法,依次类推...

5.

5.总结:抽象类的作用

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.
有些人可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢?
确实如此. 但是使用抽象类相当于多了一重编译器的校验.
使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类对象了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.
很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们.
充分利用编译器的校验, 在实际开发中是非常有意义的.

 接口

接口可以理解为是比抽象类更抽象的东西。

一.接口的概念

接口的例子在生活中到处都是:如笔记本上的USB口,电源插座等。、

电脑的USB口上,可以插:U盘、鼠标、键盘...所有符合USB协议的设备
电源插座插孔上,可以插:电脑、电视机、电饭煲...所有符合规范的设备
通过上述例子可以看出:接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

二.语法规则

接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。
  1.接口名称通常以大写字母  开头表示。
  2.接口的命名一般使用“形容词”词性的单词。

1.1接口特性

1.接口中定义的成员变量是默认被public static final 修饰的,所以我们为了保持整洁可以不写public static final。

2.接口中的方法被默认修饰为public abstract,因此可以省略不写。

3.如果接口中的方法被default修饰,那么可以有具体的代码实现。

4.如果接口中的方法被static修饰,那么它也可以有具体的实现。

3.接口中除被default和static修饰方法外都要被重写(除非子类被abstract修饰)否则就报错。

2.1.1继承接口

1.子类使用“implements”关键字继承接口。如:例一

2.我们知道子类只能继承一个父类,但是一个子类却可以继承多个接口。如:例一

3.接口和接口之间可以使用“extends”拓展。如:例二

例一:

例二:

三.实战接口

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

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

相关文章

ESG评级可持续发展之路,ESG评级的好处

在商业文明的演进历程中,ESG评级正成为衡量企业价值的全新坐标系。这套融合环境(Environmental)、社会(Social)和治理(Governance)三大维度的评估体系,犹如一盏明灯,指引…

camera人脸识别问题之二:【FFD】太阳逆光场景,人像模式后置打开美颜和滤镜,关闭heif拍摄格式对着人脸拍照,成像口红出现位置错误

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: camera人脸识别问题之二:【FFD】太阳逆光场景,人像模式后置打开美颜和滤镜,关…

YOLO-Count:用于文本到图像生成的可微分目标计数

摘要 https://arxiv.org/pdf/2508.00728v1 我们提出了YOLO-Count,一种可微分的开放词汇目标计数模型,旨在解决通用计数挑战并实现文本到图像(T2I)生成的精确数量控制。核心贡献是"基数"图(cardinality map),这是一种新颖的回归目标…

Go 的错误处理方式深度解析—— error vs panic vs recover:机制原理与实战取舍

一、Go 的错误处理哲学Go 的设计哲学鼓励明确的、显式的错误处理方式。它不像 Java 或 Python 使用异常机制,而是采用了返回值 error 的方式,让错误成为程序流程的一部分。Go 的错误处理核心理念是: 错误是值(Errors are values&a…

官方Windows系统部署下载工具实践指南

摘要:本文介绍两款用于获取微软正版系统部署文件的工具,适用于需要快速搭建Windows环境的技术人员。所有工具均基于官方渠道实现,不涉及系统修改或激活功能。一、Windows系统镜像下载方案工具名称:Windows镜像直链下载工具 核心功…

Pandas query() 方法详解

Pandas query() 方法详解query() 是 Pandas 中一个非常强大的方法,它允许你使用字符串表达式来筛选数据行。这种方法比传统的布尔索引更简洁、更易读。基本语法df.query(expr, inplaceFalse, **kwargs)expr: 查询字符串表达式inplace: 是否原地修改 DataFrame (默认…

Linux系统层IO

1.c语言文件操作 fopen:打开文件,模式 "w"(写,覆盖)或 "r"(读)。 fwrite:fwrite(data, size, count, fp),按 size 字节写入 count 次数据。 fread…

QT中的trimmed() 方法(1)

QT中的trimmed() 方法(2) trimmed() 是 Qt 框架 中 QString 类提供的一个方法,用于 去除字符串首尾的空白字符(whitespace characters)。它的作用类似于标准 C 中的 std::string 的 trim 操作,但专为 Qt 的…

动漫软件集合分享

通过网盘分享的文件:动漫软件 链接: https://pan.baidu.com/s/1TD_OmaAZksfFxJ4PW6rS-w?pwd1234 提取码: 1234 打印动漫.apk 当鸟动漫.apk 动漫共和国【OmoFun复活】.apk 咕咕香.apk 黑猫动漫.apk 团次元【推荐】.apk 橘漫.apk 曼波.apk 萌国.apk 趣动漫.apk 三…

Mysql与Ooracle 索引失效场景对比

MySQL 和 Oracle 作为主流关系型数据库,其索引失效的场景既有共性,也因底层优化器、索引类型支持等差异存在不同。以下从常见索引失效场景对比两者的表现及原因:一、索引列上使用函数 / 表达式共性:若直接在索引列上使用函数或表达…

【unity知识】unity使用AABB(轴对齐包围盒)和OBB(定向包围盒)优化碰撞检测

文章目录前言一、AABB(轴对齐包围盒)1、基本概念2、数学表示3、Unity中的实现4、实际应用示例二、OBB(有向包围盒)1、Physics.ComputePenetration (Unity 物理引擎)1.1 基本概念1.2 Unity中的实现1.3 实际应用示例2、OBB (SAT) 手…

Numpy科学计算与数据分析专题

Numpy科学计算与数据分析 1. Numpy入门:数组操作与科学计算基础 2. Numpy入门:多平台安装与基础环境配置 3. Numpy数组创建与应用入门 4. Numpy数组属性入门:形状、维度与大小 5. Numpy数组索引与切片入门 6. Numpy数组操作入门:…

齐护机器人小智AI_MCP图形化编程控制Arduino_ESP32

齐护机器人小智AI_MCP图形化编程控制Arduino_ESP32 齐护AiTall在项目实践里,我们常常期望达成这样一种场景:借助智能体(例如小智 AI)来远程操控其他开发板上的设备,这类似于智能家居系统中智能音箱与各类家电的互动模式…

CPO-SVM分类预测+特征贡献SHAP分析,通过特征贡献分析增强模型透明度,Matlab代码实现,引入SHAP方法打破黑箱限制,提供全局及局部双重解释视角

代码功能 该Matlab代码实现了一个基于CPO-SVM冠豪猪算法优化支持向量机的数据分类模型,结合了SHAP可解释性分析,CPO选择最佳的SVM参数c和g。 SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明…

Failed to restart docker.service: Unit docker.service is masked.

docker.service 被标记为 "masked" 意味着 systemd 已阻止该服务被启动或运行。这通常发生在 Docker Desktop 安装过程中,因为它使用自己的服务管理机制。以下是解决方法: 解决方案: 解除服务的 mask 状态: bash sudo systemctl unmask docker.service sudo sys…

2025 蓝桥杯C/C++国B 部分题解

P12836 [蓝桥杯 2025 国 B] 翻倍 题目描述 给定 nnn 个正整数 A1,A2,…,AnA_1, A_2, \ldots, A_nA1​,A2​,…,An​,每次操作可以选择任意一个数翻倍。 请输出让序列单调不下降,也就是每个数都不小于上一个数,最少需要操作多少次?…

os标准库

os标准库os包提供了操作系统函数,但和操作系统无关。 os包的接口规定为在所有操作系统中都是一致的。 设计为Unix风格的。1. 权限说明 os标准库有大量的文件操作,在创建文件等操作中,需要指的perm。 在go语言中perm是一个uint32类型 在go语言…

QtC++ 中使用 qtwebsocket 开源库实现基于websocket的本地服务开发详解

前言 当前实时通信功能越来越受到重视,无论是在线聊天、实时数据监控还是多人协作工具,都离不开高效、稳定的实时通信技术。WebSocket 作为一种全双工通信协议,为实时通信提供了良好的解决方案。而在 QtC 开发环境中,qtwebsocket …

小程序实时保存优化

背景。避免数据存储后丢失。要求实时保存。问题:保存时出现卡断,输入的内容会被抹除。问题原因。输入频繁速度块,会影响cpu处理速度。解决方案。用户停止输入500ms后开始保存,否则不保存。这里是保存方法:当500ms以内有…

国产化Excel处理组件Spire.XLS教程:使用 C# 将 DataTable 导出为 Excel 文件

在 C# 中将 DataTable 导出为 Excel 文件,是 .NET 开发中常见的任务,广泛应用于报表生成、日志导出、系统间数据共享等场景。通过使用独立的组件库,开发者可以轻松将 DataTable 数据写入 Excel 文件,并应用格式设置,生…