龙空技术网

在java中定义抽象属性,你是这样做的吗?

我爱JAVA 266

前言:

而今小伙伴们对“属性java”大体比较关切,我们都需要分析一些“属性java”的相关文章。那么小编也在网络上搜集了一些有关“属性java””的相关资讯,希望我们能喜欢,小伙伴们一起来学习一下吧!

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

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

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

一、实用案例

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

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

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

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

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

二、定义抽象属性

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

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

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

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

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

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

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

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

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

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

输出:

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

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

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

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

TransactionManagerFS分别为:

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

输出:

今天的分享就到这里结束了,希望大家能在下方进行评论!

今天就到这里啦,喜欢编程的小伙伴可以关注我哦!有学习方面的问题可以私信回复:学习!

标签: #属性java