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

抽象类及其特性

目录

  • 1、概念
  • 2、语法
  • 3、特性
  • 4、作用

1、概念

在面向对象中,所有对象都是通过类来描述的,但是并不是所有的类都可以用来描述对象。比如下述例子中的 Animal 类,Dog 类和 Cat 类是 Animal 类的子类,可以分别描述小狗和小猫,但 Animal 类无法具体描述哪种动物,如果一个类中没有具体的信息来描述具体的对象,那么这样的类就是抽象类
Dog 类和 Cat 类重写了 bark() 方法,且小狗和小猫都有具体的叫法,但是动物的 bark() 方法无法具体实现,因此可以将 Animal 类中的 bark() 方法设计为抽象方法,包含抽象方法的类称为抽象类。
在这里插入图片描述

2、语法

在 Java 中,一个类如果被 abstract 修饰就称为抽象类,一个方法如果被 abstract 修饰就称为抽象方法。

// 抽象类
public abstract class Animal {
    // 抽象方法:不用给出具体的实现
    public abstract void eat();
}

3、特性

1、抽象类不直接实例化对象。

在这里插入图片描述
2、抽象类必须被继承,且继承后的子类要重写父类中的抽象方法,否则子类也必须声明为抽象类。

在这里插入图片描述

在这里插入图片描述

3、抽象方法不能是 private 的:因为抽象方法需要被子类重写,而 private 修饰的方法不能被重写。

在这里插入图片描述

4、抽象方法不能被 static 修饰:由于静态方法没有 this 引用,无法被重写,而抽象方法需要被子类重写。

在这里插入图片描述
5、 抽象方法不能被 final 修饰:被 final 修饰的方法不能被子类重写,而抽象方法需要被子类重写。

在这里插入图片描述
6、抽象类中不一定含有抽象方法,只要有 abstract 修饰就是抽象类;但有抽象方法的类一定是抽象类。
7、抽象类也是类,可以包含普通方法、属性、构造方法和代码块。

在这里插入图片描述

4、作用

如果需要使用抽象类,需要继承抽象类,然后子类重写抽象类的抽象方法,那么问题来了,普通的类也可以被继承,普通的方法也可以被重写,为什么需要使用到抽象类和抽象方法呢?
原因是使用了抽象类可以多一重编译器的校验。
假如实际工作应该由子类完成,但不小心使用成父类,如果父类是普通类编译器是不会报错的,但是如果父类是抽象类,那么编译器会在父类实例化的时候提示错误,可以让我们尽早发现问题。

就比如 final 关键字,如果我们想要创建值始终不变的变量,但是之后不小心赋值导致结果出错,这样的错误很难发现,但是如果给变量加上 final。
关键字,就代表该变量是常量,就是之后不小心被赋值,编译器也会及时报错。因此充分利用编译器的校验在实际开发中是有重要意义的。

http://www.dtcms.com/a/121976.html

相关文章:

  • cpp(c++)win 10编译GDAL、PROJ、SQLite3、curl、libtiff
  • Easysearch VS Opensearch 数据写入与存储性能对比
  • HOW - 实现 useClickOutside 或者 useClickAway
  • 大模型本地部署系列(1) Ollama的安装与配置
  • 神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)
  • 408 计算机网络 知识点记忆(6)
  • Elasticsearch DSL 中的 aggs 聚合分析
  • 数据结构实验3.3:求解迷宫路径问题
  • 西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成
  • SQL注入(SQL Injection)
  • Ollama 与 llama.cpp 深度对比
  • [特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]
  • 虽然理解git命令,但是我选择vscode插件!
  • Databricks: Why did your cluster disappear?
  • 【UE5】RTS游戏的框选功能+行军线效果实现
  • Spring Boot 3.x 下 Spring Security 的执行流程、核心类和原理详解,结合用户描述的关键点展开说明,并以表格总结
  • WPF 绑定方式举例
  • LabVIEW 图像处理中常见的边缘检测算法
  • 发票真伪查验接口集成攻略-PHP批量查验发票真伪
  • 贪心算法(17)(java)可被三整除的最大整数和
  • [CISSP] [9] 安全漏洞,威胁和对策
  • 视觉分析AI赋能智慧水务多场景应用
  • S32K144的m_data_2地址不够存,重新在LD文件中配置地址区域
  • doxygen自动生成文档,注释容易错位的补充
  • 雷电模拟器过检测技术全解析
  • 使用docker 安装向量数据库Milvus
  • 黑马 SpringAI+DeepSeek 实战:从对话机器人到企业级知识库的大模型开发全攻略
  • <《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性
  • package.json配置项积累
  • 防火墙介绍