抽象类,抽象方法

1、抽象类概述

由来

  • 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。

定义

  • 抽象方法:没有方法体的方法。(将 共性的 行为 方法 抽取到父类之后。由于每一个子类执行的内容是不一样,所以,在父类中不能确定 具体的方法体。该方法就可以定义为抽象方法。)
  • 抽象类:包含抽象方法的类。

2、abstract使用格式

抽象方法

使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

定义格式:

修饰符    abstract   返回值类型     方法名    (参数列表);

代码举例:

public abstract void run();

抽象类

  • 如果一个类包含抽象方法,那么该类必须是抽象类。

定义格式:

abstract      class     类名字   {

}

代码举例:

public abstract class Animal{

                public  abstract   void    run();

}

3、抽象的使用

  • 继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

4、如何使用抽象类和抽象方法:

  1. 不能直接创建new抽象类对象
  2. 必须用一个子类来继承抽象父类。
  3. 子类必须 覆盖重写 抽象父类当中所有的抽象方法。(覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法大括号。)
  4. 创建子类对象进行使用。

5、注意事项

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。(理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。)( 抽象类不能实例化
  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。(理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。)
    1. public abstract class Fu {public Fu() {System.out.println("抽象父类构造方法执行!");}public abstract void eat();
      }class Zi extends Fu {public Zi() {//super();  子类当中赠送的superSystem.out.println("子类构造方法执行");}@Overridepublic void eat() {System.out.println("吃饭饭");}
      }class DemoMain {public static void main(String[] args) {Zi zi = new Zi();zi.eat();}
      }
      D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=3853:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception DemoMain
      抽象父类构造方法执行!
      子类构造方法执行
      吃饭饭Process finished with exit code 0
      
  3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。(理解:未包含抽象方法的抽象类,目前就是不想让调用者创建该类对象,通常用于某些特殊的类的结构设计。)( 设计模式:适配器模式就可以使用没有任何抽象方法的抽象类
  4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。(理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。)

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

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

相关文章

基于Doris实时数据开发的一些注意事项

300万字!全网最全大数据学习面试社区等你来! 最近Doris的发展大家是有目共睹的。例如冷热分离等新特性的持续增加。使得Doris在易用和成本上都有大幅提升。 基于Doris的一些存储实时数仓在越来越多的场景中开始有一些实践。大家也看到了这种方案频繁出现…

Kubernetes(K8s)从入门到精通系列之十五:利用 kubeadm 创建高可用K8s集群

Kubernetes K8s从入门到精通系列之十五:利用 kubeadm 创建高可用K8s集群 一、kubeadm、kubelet和kubectl的区别二、准备工作1.堆叠Stacked etcd拓扑2.外部etcd拓扑三、容器镜像四、命令行五、为 kube-apiserver 创建负载均衡器六、使用堆控制平面和 etcd 节点七、托管节点标签…

MYSQL进阶-查询优化- 实战 STATUS

回城传送–》《100天精通MYSQL从入门到就业》 文末有送书活动,可以参加! 文章目录 一、练习题目二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据解法SHOW STATUS是什么实战经验:常用的mysql状态查询1、QPS(每秒处理的请求数量)计算思路…

Android 13 Hotseat定制化修改

一.背景 由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,下面开始…

对于现有的分布式id发号器的思考 id生成器 雪花算法 uuid

目录 雪花id tinyid uuid 分布式id特点 业务编号 数据中心编号 当前时间 ip地址 当前序号 对于时钟回拨问题 发号器机器当期时间小于redis的时间 解决方案 发号器机器当期时间等于redis时间 发号器机器当期时间大于redis时间 分布式id的单次获取和批次获取 在工…

C语言:在反汇编中,rep stos是什么意思?

在汇编语言中,"rep stos" 是一条指令的组合,用于在内存中进行重复的存储操作。这个组合实际上是两个指令的结合:"rep" 和 "stos"。 "rep":这是一个前缀指令,代表"repeat…

MySQL 中的 Hash 索引

Hash 本身是一个函数,又被称为散列函数,它可以帮助我们大幅提升检索数据的效率。打个比方,Hash 就好像一个智能前台,你只要告诉它想要查找的人的姓名,它就会告诉你那个人坐在哪个位置,只需要一次交互就可以…

ToolLLM:能够使用 16000 种真实 API 的 LLM

随着对 LLM(大语言模型)的了解与使用越来越多,大家开始偏向于探索 LLM 的 agent 能力。尤其是让 LLM 学习理解 API,使用工具进行对用户的 instruction(指令)进行处理。然而,目前的开源大模型并不…

大麦订单截图 一键生成订单截图

新版付款图样式展示 这个样式图就是在大麦刚付款完的一个订单截图,它的状态是等待卖家发货 下滑下载源码 下载源码:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

【新闻】室温超导体来了?可以在超级计算机上写代码,用超级计算机打游戏?

2023年7月,韩国科学家团队表示,他们发现了全球首个室温超导材料,一种名为“改性铅磷灰石晶体结构”的材料。7月31日,该团队第二篇论文《超导体 Pb10 xCux (PO4) 60o在室温常压下表现出悬浮现象及其机理》在arXiv上发布&#xff0c…

Linux-PG+postgres安装

一、PG数据库安装 1. 获取所需依赖包 wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-devel-5.0.1-7.el7.x86_64.rpm wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-5.0.1-7.el7.x86_64.rpm wge…

linux系统虚拟主机开启支持Swoole Loader扩展

特别说明:只是安装支持Swoole扩展,主机并没有安装服务端。目前支持版本php5.4-php7.2。 1、登陆主机控制面板,找到【远程文件下载】这个功能。 2、远程下载文件填写http://download.myhostadmin.net/vps/SwooleLoader_linux.zip 下载保存的路…

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全

CTFshow XXE web373 学习资料: (梭哈~) https://www.cnblogs.com/20175211lyz/p/11413335.html https://www.cnblogs.com/zhaijiahui/p/9147595.html https://www.cnblogs.com/r00tuser/p/7255939.html https://mp.weixin.qq.com/s?__bizMz…

Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块

1. requests 模块post 函数 1.1 post 函数的参数 (简单版) 参数1: url 网络地址 参数2: data 请求数据 (一般数据是 账号,密码) 参数3: headers 头请求 &#xff08…

【团队协作开发】IDEA中Git从远程其他分支拉取代码并同步更新到自己的分支中更新不全问题解决

出现这个问题往往是因为没有先拉取远程分支的最新变化到本地导致的,具体操作流程和解决方法如下: 1、首先,先确保本地有一个和远程要拉取分支(比如dev_z)相关联的分支,如果没有:选择远程要拉取的分支,点击C…

Unity开发笔记:将Texture2D裁剪出指定圆角用来输出png等图片

学习记录整理,自用,也希望能帮助到有相同需求的人。 圆角原理见大佬的博客: 圆角原理 简单来说就是将图片分成四个区域,找出拐角处的拐子的设置为透明 ![](https://img-blog.csdnimg.cn/a788825545614816895a9cca42ddc4a9.png 如…

pc端与flutter通信失效, Method not found

报错情况描述:pc端与flutter通信,ios端能实现通信,安卓端通信报错 报错通信代码: //app消息通知window.callbackName function (res) {window?.jsBridge && window.jsBridge?.postMessage(JSON.stringify(res), "…

创建Springboot+vue3项目

项目概述创建springboot项目加入mybatis-plus支持1.加入依赖代码2.创建数据库实例3.yml文件的配置4.编写测试代码5.测试结果 创建vue项目报错错误一错误二错误三 项目概述 后端:Springboot、mybatis-plus、java 前端:nodejs、vue脚手架、element-ui 数据…

逆向破解学习-雷电星海战歌

apk 雷电星海战歌 https://download.csdn.net/download/AdrianAndroid/88200826 安装apk,并试玩 # 通过关键字搜索jad 找到统一支付接口 找到匿名内部类的名称 Hook代码 public class HookComAstPlane extends HookImpl {Overridepublic String packageNam…

安防监控小程序商城开发攻略

在当今信息化的时代,安防监控已经成为了人们生活中的重要一环。为了更好地满足人们对于安全的需求,许多企业都开始利用小程序来开展安防监控业务。那么,如何搭建一个安防监控小程序呢?下面我们将一步步来进行介绍。 首先&#xff…