抽象关键字通常应用于类和方法,以便将某些行为的实现委托给子类。

Java不支持抽象属性,如果您试图将类属性标记为抽象,则会得到编译错误。

在本教程中,将介绍两种定义抽象属性的方法,这些属性由子类设置,而不使用抽象关键字。

一、实用案例

假设我们要实现一个事务日志模块,该模块记录关于特定事务的信息。

我们希望我们的模块是抽象的,这样我们就能够支持不同的日志记录方式:

文件系统日志记录、数据库日志记录等等。

我们的引擎使用依赖于日志记录机制的预定义分隔符将所有事务信息连接在一个字符串中,例如逗号字符“”用于在文件系统中记录逗号分隔的字符串。

因此,分隔符对我们的引擎来说是抽象的,需要由每种日志记录机制显式地定义。

二、定义抽象属性

在本节中,我们提供了两种将分隔符的定义委托给子类的方法。

在抽象类中定义参数化构造函数

在抽象类中委托动态属性定义的第一种方法是定义参数化构造函数。

所以我们创建的引擎如下:

在抽象类中定义参数化构造函数时,子类必须定义自己的构造函数并调用父构造函数。

因此,我们强制separator属性依赖于所使用的日志记录机制。

如前所述,我们的引擎提供了静态行为的实现,这些静态行为在所有日志记录机制之间都很常见。

比如:startTransaction()、endTransaction(),而它将动态行为writeTransaction()委托给子类。

现在,如果我们想创建一个记录到文件系统的事务管理器,我们将它定义为:

让我们做一些测试,看看上面的实现是如何工作的:

输出:

三、通过getter方法传递分隔符

另一种委托动态属性定义的方法是定义抽象getter方法,该方法根据使用的日志记录机制检索所需的分隔符。

在我们的引擎中,当我们想使用分隔符时,我们就使用getter方法。

所以我们修改我们的引擎如下:

TransactionManagerFS分别为:

然后更新main类以使用新的实现,并确保得到相同的结果。

输出:

好了今天的分享就到这里结束了,喜欢可以帮助到大家学习小伙伴可以关注我哦!有学习方面的问题可以私信回复:学习!

java属性定义_在java中定义抽象属性相关推荐

  1. devops定义_在层中定义DevOps

    devops定义 DevOps是什么? 我认为这是每个DevOps初学者都会问的一个问题. 如果您问10个人这个问题,您很可能会得到10个不同的答案. 这肯定说明了DevOps的普遍性,开放性,但也说 ...

  2. jq onclick 定义_从HTML中的onClick属性调用jQuery方法

    我在整个系统中实现JQuery是比较新的,我正在享受这个机会. 我遇到一个问题,我想找到正确的决心. 以下是我想做的一个简单案例: 我在页面上有一个按钮,在点击事件我想调用一个我定义的jquery函数 ...

  3. type c pin定义_在C中定义宏以设置和清除PIN的位

    type c pin定义 Given a PIN (value in HEX) and bit number, we have to SET and then CLEAR given bit of t ...

  4. python 模块定义_在python中定义私有模块函数

    类私有化和模块私有化之间可能存在混淆. A模块private以一个下划线开头 当使用import命令的from import *形式时,这样的元素不会被复制:但是,如果使用import 语法(see ...

  5. java arraylist 函数_使用Java-8中的函数ArrayList

    问题描述: 我希望能够使用从另一个类传入的函数的ArrayList(其中函数已在其他类中定义).如果在一个类中定义了可能具有不同输入和返回类型的函数列表,我希望能够将其中一些的ArrayList(可能 ...

  6. matlab中如何定义整形变量,MATLAB中定义变量的问题

    题目: MATLAB中定义变量的问题 比如说可以用syms定义 >> syms x11 x12 x13 x14 >> syms x21 x22 x23 x24 >> ...

  7. java 整型数组定义_在Java中定义一个具有10个元素的整型数组a的语句是:___

    在Java中定义一个具有10个元素的整型数组a的语句是:___ 答: int [] arr = new int[10] 在借贷记账法下() 答:在账户结构上,"借"和"贷 ...

  8. java 机机接口定义_【JAVA】接口

    先问一个问题,为什么需要接口? 看例子: 需求:要求实现防盗门的功能.门有"开"和"关"的功能,所有"上锁"和"开锁"的 ...

  9. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

最新文章

  1. 博客改版日记 9.11——抱歉
  2. 中文预训练模型ZEN开源,效果领域内最佳,创新工场港科大出品
  3. c# 对文件流的读写
  4. VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
  5. 从C++20 shared_ptr移除unique()方法浅析多线程同步
  6. mysql日活统计函数_如何通过简化日活模型,预估一个产品的日活(DAU)?
  7. 阿里云全站加速DCDN升级
  8. springmvc+ztree v3实现类似表单回显功能
  9. 常见错误 不能打开注册表关键字
  10. Google FlatBuffers——开源、跨平台的新一代序列化工具
  11. Eclipse 编码常用技巧【不断补充完善】
  12. 判断斗地主卡牌类型的思路
  13. ajax怎么回调函数,ajax使用回调函数的例子(原生代码和jquery代码)
  14. Idea插件官网下载安装(plugins)
  15. Android 11.0 修改添加的默认文件夹为9宫格样式
  16. stm32F4安装包MDK5
  17. 喜马拉雅 批量重命名
  18. mysql基础文档_mysql基础
  19. Apache部署超详细教程
  20. 用于阿尔茨海默症分期早期检测的多模态深度学习模型

热门文章

  1. 两个网段共享打印机_Win7电脑之间实现跨网段共享打印机的方法
  2. 易邮邮件监控 v2.0 是什么
  3. h5中iOS页面显示缩放问题
  4. EntityFrameWork数据迁移——暨改变数据库结构的方法
  5. 微软网站打开慢怎么办_为什么你的Python包老是装不上?收下这个网站就对了
  6. Java 基础篇:多线程基本概念
  7. uaGate SI自动化状态监测和工业4.0解决方案
  8. DA14580软件开发平台参考(五)
  9. java 生成图片验证码
  10. Yeslab现任明教教主层次化PKI + Ez×××