网站首页 > java教程 正文
抽象关键字通常应用于类和方法,以便将某些行为的实现委托给子类。
Java不支持抽象属性,如果您试图将类属性标记为抽象,则会得到编译错误。
在本教程中,将介绍两种定义抽象属性的方法,这些属性由子类设置,而不使用抽象关键字。
一、实用案例
假设我们要实现一个事务日志模块,该模块记录关于特定事务的信息。
我们希望我们的模块是抽象的,这样我们就能够支持不同的日志记录方式:
文件系统日志记录、数据库日志记录等等。
我们的引擎使用依赖于日志记录机制的预定义分隔符将所有事务信息连接在一个字符串中,例如逗号字符“”用于在文件系统中记录逗号分隔的字符串。
因此,分隔符对我们的引擎来说是抽象的,需要由每种日志记录机制显式地定义。
二、定义抽象属性
在本节中,我们提供了两种将分隔符的定义委托给子类的方法。
在抽象类中定义参数化构造函数
在抽象类中委托动态属性定义的第一种方法是定义参数化构造函数。
所以我们创建的引擎如下:
在抽象类中定义参数化构造函数时,子类必须定义自己的构造函数并调用父构造函数。
因此,我们强制separator属性依赖于所使用的日志记录机制。
如前所述,我们的引擎提供了静态行为的实现,这些静态行为在所有日志记录机制之间都很常见。
比如:startTransaction()、endTransaction(),而它将动态行为writeTransaction()委托给子类。
现在,如果我们想创建一个记录到文件系统的事务管理器,我们将它定义为:
让我们做一些测试,看看上面的实现是如何工作的:
输出:
三、通过getter方法传递分隔符
另一种委托动态属性定义的方法是定义抽象getter方法,该方法根据使用的日志记录机制检索所需的分隔符。
在我们的引擎中,当我们想使用分隔符时,我们就使用getter方法。
所以我们修改我们的引擎如下:
TransactionManagerFS分别为:
然后更新main类以使用新的实现,并确保得到相同的结果。
输出:
好了今天的分享就到这里结束了,喜欢可以帮助到大家学习小伙伴可以关注我哦!有学习方面的问题可以私信回复:学习!
猜你喜欢
- 2024-10-04 “全栈2019”Java第九十六章:抽象局部内部类详解
- 2024-10-04 JAVA笔记(十)面向对象——接口和抽象类
- 2024-10-04 Java抽象类与接口的区别(java抽象类与接口的区别是什么)
- 2024-10-04 Java接口和抽象类有什么共同点和区别?
- 2024-10-04 Java之路-08抽象类与接口(java抽象类入门教程)
- 2024-10-04 java基础——抽象类和接口(java抽象类和接口的使用场景)
- 2024-10-04 Java学习:基础(抽象类、模板方法模式、接口)
- 2024-10-04 Java学习:抽象方法和抽象类的使用
- 2024-10-04 Java中的抽象类与接口(java抽象类和接口的定义)
- 2024-10-04 java基础学习——abstract抽象类(java 抽象)
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)