[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

相关文章

springboot控制bean的创建顺序

《springboot控制bean的创建顺序》本文主要介绍了spring-boot控制bean的创建顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1、order注解(不一定有效)2、dependsOn注解(有效)3、提前将bean注册为Bea

Java中的ConcurrentBitSet使用小结

《Java中的ConcurrentBitSet使用小结》本文主要介绍了Java中的ConcurrentBitSet使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、核心澄清:Java标准库无内置ConcurrentBitSet二、推荐方案:Eclipse

java中的Supplier接口解析

《java中的Supplier接口解析》Java8引入的Supplier接口是一个无参数函数式接口,通过get()方法延迟计算结果,它适用于按需生成场景,下面就来介绍一下如何使用,感兴趣的可以了解一下... 目录1. 接口定义与核心方法2. 典型使用场景场景1:延迟初始化(Lazy Initializati

Java中ScopeValue的使用小结

《Java中ScopeValue的使用小结》Java21引入的ScopedValue是一种作用域内共享不可变数据的预览API,本文就来详细介绍一下Java中ScopeValue的使用小结,感兴趣的可以... 目录一、Java ScopedValue(作用域值)详解1. 定义与背景2. 核心特性3. 使用方法

spring中Interceptor的使用小结

《spring中Interceptor的使用小结》SpringInterceptor是SpringMVC提供的一种机制,用于在请求处理的不同阶段插入自定义逻辑,通过实现HandlerIntercept... 目录一、Interceptor 的核心概念二、Interceptor 的创建与配置三、拦截器的执行顺

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

Spring Boot 中 RestTemplate 的核心用法指南

《SpringBoot中RestTemplate的核心用法指南》本文详细介绍了RestTemplate的使用,包括基础用法、进阶配置技巧、实战案例以及最佳实践建议,通过一个腾讯地图路线规划的案... 目录一、环境准备二、基础用法全解析1. GET 请求的三种姿势2. POST 请求深度实践三、进阶配置技巧1

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

SpringBoot整合Zuul全过程

《SpringBoot整合Zuul全过程》Zuul网关是微服务架构中的重要组件,具备统一入口、鉴权校验、动态路由等功能,它通过配置文件进行灵活的路由和过滤器设置,支持Hystrix进行容错处理,还提供... 目录Zuul网关的作用Zuul网关的应用1、网关访问方式2、网关依赖注入3、网关启动器4、网关全局变