在抽象类中定义带参数的构造函数时,子类将会被强迫定义本身的构造函数并调用super()。 如许我们就能强迫separator属性依附于已应用的日记记录机制。
留意,我们的引擎实现了所有日记机制共有的静态行动:startTransaction(), endTransaction(),同时将动态行动writeTransaction()交给子类去实现。
如今,如不雅我们想要创建一个事务治理器,用它将日记内容记录到一个文件中,那么可以如许去定义:
- public class TransactionManagerFS extends TransactionManager{
- // The IDE forces you to implement constructor.
- public TransactionManagerFS(String separator) {
- super(separator);
- }
- @Override
- public void writeTransaction(String result) {
- System.out.println("The following transaction has just finished: " );
- System.out.println(result);
- }
- }
接下来做一个测试,看看代码是如何工作的
- public static void main(String[] args) throws InterruptedException {
- // we pass the separator explicitly in the constructor
- TransactionManager transactionManager = new TransactionManagerFS(",");
- Transaction transaction = transactionManager.startTransaction();
- transaction.setData("This is a test transaction !!");
- Thread.sleep(1500);
- transactionManager.endTransaction(transaction);
- }
输出:
经由过程getter办法传递分隔符
别的一种实现动态属性的办法是:经由过程定义一个抽象的getter办法,该办法根据当前的日记记录机制来检索所需的分隔符。在我们的引擎中,当须要要应用分隔符时,可以经由过程调用这个getter办法获得。
接下来我们将引擎修改成如许:
- public abstract class TransactionManager {
- public abstract String getSeperator();
- public abstract void writeTransaction(String result);
- public Transaction startTransaction()
- {
推荐阅读
【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索 创建HTTP请求使现代编程说话的核心功能之一,也是很多法度榜样员在接触到新的开辟情况时最>>>详细阅读
本文标题:怎样在java中定义一个抽象属性
地址:http://www.17bianji.com/lsqh/36784.html
1/2 1