什么是抽象类

2023-10-27

抽象概念:

当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!

  • 抽象方法 : 没有方法体的方法。
  • 抽象类:包含抽象方法的类。

抽象类特点:

  • 抽象类和抽象方法必须使用 abstract 关键字修饰
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能实例化
  • 抽象类可以有构造方法
  • 抽象类的子类
    ​ 要么重写抽象类中的所有抽象方法
    ​ 要么是抽象类(无意义,因为不能创建对象,还要再找个子类创建对象…)

abstract:

abstract是抽象的意思,用于修饰方法和类,修饰的方法是抽象方法,修饰的类是抽象类。

抽象方法:

将共性的方法,抽取到父类,但是无法具体明确,就把方法定义为抽象方法,比如,狗和猫都需要吃饭,但是吃的东西不一样,那就把吃在父类中定义为抽象方法,狗继承后写为吃狗粮,猫继承后写为吃猫粮。

抽象类:

如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。

定义格式:

  //抽象类的定义
  public abstract class 类名 {}

  //抽象方法的定义
  public abstract void eat();

演示:

//    定义父类
public abstract class Person {
//    定义抽象方法
   abstract void eat();
}
     class Zi extends Person{

         @Override
         void eat() {
             System.out.println("我重写了父类的吃方法");
         }
     }
//   测试类
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.eat();
        System.out.println(zi);
    }

抽象类的注意事项:

  1. 抽象类不能创建对象

假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

  1. 可以有构造器

子类的构造方法中,有默认的super(),需要访问父类构造方法。子类继承父类不会报错

  1. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想

模板中不能决定的东西定义成抽象方法,让使用模板(继承抽象类)的类去重写抽象方法实现需求,这是典型的模板思想。

抽象类总结

抽象类的特征总结起来可以说是有得有失

  • 有得:抽象类得到了拥有抽象方法的能力。
  • 有失:抽象类失去了创建对象的能力。 其他成员(构造器,实例方法,静态方法等)抽象类都是具备的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是抽象类 的相关文章

  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • RxJava + Retrofit 2 的正确使用方法

    我有这样的 JSON success true data id 29 name u0420 u0435 u0441 u0442 u043e u0440 u0430 u0446 u0456 u044f u0411 u0430 u0447 u0
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • Java 流 - 按嵌套列表分组(按第二顺序列出)

    我有以下数据结构 每个学生都有一个州列表 每个州都有一个城市列表 public class Student private int id private String name private List
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • jpa2 CriteriaBuilder order by “ORDER BY 表达式必须出现在选择列表中”

    我正在写一个查询标准生成器 但无法添加order by子句 因为它随消息一起抛出错误ORDER BY 表达式必须出现在选择列表中这是我的实体 public class A Integer aId ManyToOne JoinColumn n
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 如何使用 Selenium 中的索引切换到窗口

    由于selenium不提供切换到窗口 多个窗口 的方法 但我想使用index html自定义方法来切换到不同的窗口 但下面的代码没有按预期工作 请建议以下方法的最佳实施 public void switchToWindowIndex int
  • 在 Java 中创建带注释的对象时收到通知

    Intent 我有一个自定义 Java 注释 DynamicField public class RESTEndpointInvoker DynamicField key httpTimeout private long httpTimeo
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • “___ 中的方法 ___() 是在无法访问的类或接口中定义的”编译错误

    我发现了一个奇怪的编译限制 我无法解释 并且我不明白这个限制的原因 示例1 考虑这些类 In package e1 public class C1 enum E1 A B C public E1 x In package e2 import
  • 如何列出hadoop hdfs中目录及其子目录中的所有文件

    我在 hdfs 中有一个文件夹 其中有两个子文件夹 每个子文件夹大约有 30 个子文件夹 最后 每个子文件夹都包含 xml 文件 我想列出所有 xml 文件 仅给出主文件夹的路径 在本地我可以这样做apache commons io 的 h
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近

随机推荐

  • git命令添加多个仓库,同步各分支代码,删除仓库、分支

    某些开发场景中 可能会遇到一套代码提交到2套git仓库 此时如何添加一个新仓库呢 假设已有仓库origin 想行添加一个仓库地址 命名为origin test与原仓库区分 1 查看现有仓库名及仓库地址 git remote v 2 添加新远
  • Pandsa时间序列采样频率滑窗及重采样

    目录 Pandas时间序列采样频率滑窗 1 滑窗函数rolling 获取近7天的销售总量 2 shift 及 diff 重采样 resample pandas时间戳及时间差 pandas日期处理DT对象 Pandas时间序列采样频率滑窗 1
  • 提高「程序员」的思维方式

    大家好 我是Tom哥 人和动物的最大区别就是 人具有思维能力 能将大脑里的东西实现出来 而动物则更多停留在模仿阶段 如 鹦鹉学舌 当然 这也是一种进化能力 这里着重提到了思维能力 人与人的思维能力也是有差异的 比如 一线程序员关心的这个项目
  • Oracle RAC failover 测试(连接时故障转移)

    Oracle RAC 集群最突出的表现就是高可用性 这些内容主要包括load balance以及failover 通过这些技术使得单点故障不影响客户端端应用程序对数据库的正常访问 以及通过创建service实现节点间负载均衡 本文主要描述O
  • Node.js 安装第三方模块

    所有的第三方模块包 下载安装的模块 使用的方式都是一样的 此文件以uuid举例 NPM的全称是Node Package Manager 是node的包管理器 是全球最大的开源生态系统 作用就是管理模块包 node模块包可以理解为工具 插件
  • Git常用命令cherry-pick

    Git常用命令cherry pick 将指定的提交应用于其他分支 可以用于恢复不小心撤销 revert reset 的提交 对于多分支的代码库 将代码从一个分支转移到另一个分支是常见需求 这时分两种情况 一种情况是 你需要另一个分支的所有代
  • 【知识点】Java的值传递——为什么对象在函数里修改了,返回后未修改

    问题背景 今天做题 遇到一个代码判断题 结果一直做错 题目如下 public class Point private int x private int y public Point int x int y this x x this y
  • 轻松易懂,一文告诉你什么是http协议?

    阅读本文之前 请详细阅读以下几篇文章 一文包你学会网络数据抓包 教你如何抓取网络中的数据包 黑客必备技能 一 什么是http Http协议即超文本传送协议 HTTP Hypertext transfer protocol 它定义了浏览器 即
  • matlab 10为底指数,matlab指数函数

    手机评站网今天精心准备的是 matlab指数函数 下面是详解 用matlab求指数函数 刚学这课不会经建模得y与t的关系为y a b exp c t 试确定a b c已知x 0 0 1 1 y 2 997 2 480 2 101 1 815
  • Android实现沉浸式状态栏实现在项目中的使用

    不得不说 Android实现沉浸式状态栏确实是一个不深不浅的坑 懂门路的人几分钟就能解决掉 不懂门路的人 网上找资料查资源估计也要个一两天 当然了 我也是苦于其中 不过到最后还是找出来了 ImmersionBar 一个star数超过5K的三
  • java实现xml文件读取和写入

    import java io File import java io FileInputStream import java io FileOutputStream import java io InputStream import jav
  • java中为什么MAX_ARRAY_SIZE的值为Integer.MAX_VALUE - 8

    数组对象的形状和结构 如int值数组 与标准Java对象类似 主要区别在于数组对象有一个额外的元数据 用于表示数组的大小 数组的最大尺寸为2 31 2147483648 但是需要8bytes的存储大小表示数组的长度等元数据 所以数组的大小定
  • dva 打包多个html,使用dva+umi+antd构建页面(一)

    使用dva umi antd构建页面 首先确保安装npm或者yarnhtml 建立新应用 首先建立应用目录node mkdir myapp cd myapp 推荐使用 yarn 建立应用 执行如下命令 react 若是你坚持用 npm 可执
  • HJ77火车进站

    思路 重复的子问题 每一次车进站可以选择 出 还是 不出 解决重复子问题 动规 or 深搜 此题 输出具体 方案 显然动规不符合 因此选择深搜 注意 除了维护数组 还需要维护一个栈结构 代码 include
  • 基于xxx的系统实现

    2 基于强化学习的Tic Tac To实现 3 基于文本的关键词打标 4 基于自然语言处理的情感分析系统 5 基于深度学习的语音识别系统 6 基于深度学习的人脸识别系统 7 随机森林的多分类问题研究 8 回归算法预测系统 9 决策树算法的分
  • 数据通信加密与防篡改及数字证书原理详解

    1 安全五要素 一般而言 同时满足了机密性 信息不被泄露或泄露后对别人来说并没实际价值 完整性 信息不被非法篡改或被篡改后可以检测到 和身份验证 和自己通信的人确实就是我认为和我正在通信的人 就可以认为是安全通信了 安全通信需要满足如下五点
  • QT中通过网络发送QImage的解决方案

    服务端 QImage img img load path QByteArray ba QDataStream ds ba QIODevice WriteOnly 将图片读入array 方便发送 ds lt
  • 二进制文件如何使用Notepad读取显示

    1 下载安装notepad 2 打开notepad 点击插件 plugins gt 插件管理 3 安装hex editor 滑动滚动条 找到hex editor 点击右上角安装 注 安装完后需要重启notepad 4 选择二进制文件后 右击
  • Linux线程互斥与同步

    目录 进程线程间的互斥相关背景概念 互斥和原子性 互斥量mutex 互斥量实现原理探究 锁是否需要被保护 如何保证申请锁的过程是原子的 可重入VS线程安全 Linux线程同步 条件变量 销毁条件变量 唤醒等待 进程线程间的互斥相关背景概念
  • 什么是抽象类

    抽象概念 当我们在做子类共性功能抽取时 有些方法在父类中并没有具体的体现 这个时候就需要抽象类了 在Java中 一个没有方法体的方法应该定义为抽象方法 而类中如果有抽象方法 该类必须定义为抽象类 抽象方法 没有方法体的方法 抽象类 包含抽象