[Java基础揉碎]抽象类

目录

通过问题引出

介绍

关键点

 细节

​编辑

抽象类的最佳设计模式--模版设计模式

1.先用最容易想到的方法

2.分析问题,提出使用模板设计模式


通过问题引出

假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道, 那么我们就可以声明为抽象类 

>>>当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类 

介绍

所谓抽象方法就是没有实现的方法

所谓没有实现就是指, 没有方法体

 当一个类中存在抽象方法是, 这个类也必须声明为抽象类

 一般来说, 抽象类会被继承, 有子类来具体实现

关键点

1) 用abstract关键字来修饰一个类时,这个类就叫抽象类

        访问修饰符 abstract 类名{ 

        }

2) 用abstract关键字来修饰一个方法时,这个方法就是抽象方法

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

        //没有方法体

3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现它

4)抽象类,是考官比较爰问的知识点, 在框架和设计模式使用较多

 细节

1)抽象类不能被实例化

2)抽象类不一定要包含abstract方法。也就是说, 抽象类可以没有abstract方法

3)一旦类包含了abstract方法,则这个类必须声明为abstract 

4) abstract 只能修饰类和方法,不能修饰属性和其它的

5) 抽象类可以有任意成员[因为抽象类还是类],比如:非抽象方法、构造器、静态属性等等

6) 抽象方法不能有主体,即不能实现

7) 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract类

 8) 抽象方法不能使用private、 final 和 static来修饰,因为这些关键字都是和重写相违背的

抽象类的最佳设计模式--模版设计模式

如果有一个需求

1)有多个类,完成不同的任务job

2) 要求统计得到各自完成任务的时间

1.先用最容易想到的方法

A类如下方法:

B类有如下方法:

 然后我们去执行:

但是这样有一个问题如果每个类的还有多个job需要去计算, 这样代码的复用率极低 

我们可能会说可以把重复的代码抽出来单独写一个如下的方法, 实现代码的复用

这样也有一个问题就是这样每个类都需要写一个这样的方法

2.分析问题,提出使用模板设计模式

所以我们就需要抽象类和抽象方法, 将每个类要写的这个方法抽离为一个模版

AA类去重写 

 BB类也去重写

 打印效果相同

aa.calulateTime的调用过程就是, 它先到AA类里面去看有没有这个方法, 没有之后找到父类的这个方法, 父类去掉用job, 此时上面的job是抽象方法, 这个抽象方法通过动态绑定机制, 绑定到当前对象, 在去调用AA 类里面的job方法 

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

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

相关文章

qt QProcess学习

QProcess简介 QProcess可以用于启动外部程序,它提供了一系列函数来启动、控制和与外部进程进行交互。 作用: 启动外部进程: 通过start函数进程状态和控制:判断进程是否正在运行、等待进程完成、终止进程等。如stateChanged信号进…

Camtasia Studio 2024:视频编辑与制作的新里程碑及需要下载吗

Camtasia Studio 2024:视频编辑与制作的新里程碑 在数字化时代,视频已经成为人们获取信息、娱乐和学习的主要方式之一。为了满足这一需求,视频编辑和制作软件也在不断发展和创新。Camtasia Studio 2024作为一款功能强大的视频编辑软件&#…

GIS+Python:地质灾害风险评价的智能化解决方案

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

3-Flume之拦截器与GangLia监控

Flume Interceptor 概述 Interceptor(拦截器)本身是Source的子组件之一,可以对数据进行拦截、过滤、替换等操作不同于Selector,一个Source上可以配置多个Interceptor,构成拦截器链。需要注意的是,后一个拦截器不能和前一个拦截…

linux docker镜像初始化

linux docker镜像初始化 简介 有的镜像内部使用的linux系统特别精简,许多常用命令无法安装,导致排查问题较为困难。 可以使用cat /etc/os-release查看容器使用的linux版本,再进行一些常用操作的初始化。 Debian # 设置镜像源 RUN rm -f /e…

芒果YOLOv8改进130:Neck篇,即插即用,CCFM重构跨尺度特征融合模块,构建CCFM模块,助力小目标检测涨点

芒果专栏 基于 CCFM 的改进结构,改进源码教程 | 详情如下🥇 💡本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv8改进专栏完整目录链接:👉 芒果YOLOv8深度改进教程 | 🔥 订阅一个…

HarmonyOS 健康系统联系案例 创建项目

上文 HarmonyOS 健康系统联系案例 整体原型图介绍 我们 介绍了健康系统的整体 UI 然后 我们一点一点来 今天先搭个环境 首先 我们打开开发工具首页 创建项目 一个非常令人怀念的步骤啊 我们点击 Create Project 创建一个新的工程 模板 还是选最基础的 Empty Ability 然后 …

Docker系列

目录 练习:去DockerHub搜索并拉取一个Redis镜像 docker下载nacos 练习:去DockerHub搜索并拉取一个Redis镜像 目标: 1)去DockerHub搜索Redis镜像 2)查看Redis镜像的名称和版本 3)利用docker pull命令…

【解决多线程造成的僵尸进程】

shell中强制终止与指定命令匹配的进程,解决多线程造成的僵尸进程非常好用 kill -9 $(pgrep -f command)pgrep -f command’会查找包含指定命令关键词的进程,并返回这些进程的PID(进程ID),然后kill -9会使用这些PID来强…

Java异常知识点详解

目录 1. 异常的概念与体系结构 1.1 异常的概念 1. 算术异常 2. 数组越界异常 3. 空指针异常 1.2 异常的体系结构 1.3 异常的分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出 2.3 异常声明throws 2.4 try-catch捕获并处理 2.5 finally 2.4 异常的处理流程 3. 自…

Linux基本指令解析二

Linux基本指令解析二 常见指令1.date指令2.find指令3.grep指令4.zip/unzip指令5.tar指令6.bc指令7.uname –r指令 重要的几个热键关机 常见指令 1.date指令 date 指定格式显示时间: date %Y:%m:%d date 用法:date [OPTION]... [FORMAT] 1.在显示方面…

【Docker】Docker安全与最佳实践:保护你的容器化应用程序

欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步&#xff…

PostgreSQL数据库中表的物理大小, 妙懂

数据库中表的物理大小 这是一个很有意思的话题。尤其是在我们做物理设计和空间大小评估的时候。 PostgreSQL中对于稍长一点的列,直接使用了TOAST表来存储,默认是会对表中的数据进行压缩的。关于TOAST, 以后或有时间专门做简单介绍。 先看看相关函数的定…

javaWeb学生宿舍管理系统

一、摘要 本博客介绍了如何使用Spring Boot和MySQL构建一个功能完善的JavaWeb学生宿舍管理系统。该系统分为三个角色:管理员、宿管和学生。管理员拥有对整个系统的全面管理权限,包括学生管理、宿舍管理、入住管理和管理员管理;宿管负责宿舍的…

3.Python数据分析—数据分析入门知识图谱索引(知识体系中篇)

3.Python数据分析—数据分析入门知识图谱&索引-知识体系中篇 一个人简介二数据获取和处理2.1 数据来源:2.2 数据清洗:2.2.1 缺失值处理:2.2.2 异常值处理: 2.3 数据转换:2.3.1 数据类型转换:2.3.2 数据…

【Java程序设计】【C00360】基于Springboot的考研互助交流平台(有论文)

基于Springboot的考研互助交流平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及i…

java常用应用程序编程接口(API)——IO流概述及字节流的使用

前言: IO流和File是用于把数据存放在硬盘里的工具。File可以把文件存至硬盘,但不能更改里面的数据。通过IO流可以改写硬盘里的数据。整理下学习笔记,打好基础,daydayup!!! IO流 I指Input,称为输入流:负责把…

智慧医疗包括哪些方面?智慧医疗发展前景如何?

近年来,随着云计算、物联网(internet of things,IOT)、移动互联网、大数据、人工智能(artificial intelligence,AI)、5G网络、区块链等新一代信息技术的逐步成熟和广泛应用,信息化已…

【码云Git提交】Windows

一、第一次提交 1.登录码云创仓库 2.观察创建后的提示,就有步骤命令了 3.我们在系统中打开一个测试文件夹窗口打开GitBash PS:(你需要提前装一个Node,本章不介绍) 我们打开一个创建的test测试文件夹窗口,…

题目 2808: 买房子

题目描述: 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年…