[Java基础揉碎]抽象类

2024-03-26 03:04
文章标签 java 基础 抽象类 揉碎

本文主要是介绍[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方法 

这篇关于[Java基础揉碎]抽象类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847098

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu